using System.Collections.Generic;
public static void Main()
new UnitTests().PerformUnitTest();
private static List<string> _validZips = new List<string> { "37738", "37064" };
public class TestClient1 : IHttpClient {
public int GetCustomerId() {
public List<string> GetAllValidZipCodes() {
public class TestClient2 : IHttpClient {
public int GetCustomerId() {
public List<string> GetAllValidZipCodes() {
public class TestRepo : ICustomerRepository {
public Customer GetCustomer(int customerId)
var customers = new List<Customer> {
new Customer { ID = 1, ZipCode = "37738" },
new Customer { ID = 2, ZipCode = "ABCDE" }
return customers.SingleOrDefault(p => p.ID == customerId);
public void PerformUnitTest()
ICustomerRepository repo = new TestRepo();
IHttpClient client1 = new TestClient1();
IHttpClient client2 = new TestClient2();
var sut1 = new CustomerValidator(repo, client1);
var actual1 = sut1.GetCustomerAndValidateZip();
var result1 = expected1 == actual1 ? "PASS" : "FAIL";
Console.WriteLine(result1);
var sut2 = new CustomerValidator(repo, client2);
var actual2 = sut2.GetCustomerAndValidateZip();
var result2 = expected2 == actual2 ? "FAIL" : "PASS";
Console.WriteLine(result2);
public class CustomerValidator
private readonly ICustomerRepository _customerRepository;
private readonly IHttpClient _httpClient;
public CustomerValidator(ICustomerRepository customerRepository, IHttpClient httpClient) {
_customerRepository = customerRepository;
_httpClient = httpClient;
public bool GetCustomerAndValidateZip()
int customerId = _httpClient.GetCustomerId();
var customer = _customerRepository.GetCustomer(customerId);
var allZipCodes = _httpClient.GetAllValidZipCodes();
return allZipCodes.Contains(customer.ZipCode);
private List<string> GetAllValidZipCodes()
var httpClient = new HttpClient();
return httpClient.Get<List<string>>("http://somezipcodeapi.com/GetAll");
public int ID { get; set; }
public string ZipCode { get; set; }
public interface ICustomerRepository {
Customer GetCustomer(int customerId);
public class CustomerRepository : ICustomerRepository
public Customer GetCustomer(int customerId)
var db = new DbContext();
return db.Customers.SingleOrDefault(i => i.ID == customerId);
public List<Customer> Customers { get; set; }
public interface IHttpClient {
List<string> GetAllValidZipCodes();
public class HttpClient : IHttpClient
public T Get<T>(string url)
public int GetCustomerId() {
return (int)HttpContext.Current.Profile.GetPropertyValue("CustomerId");
public List<string> GetAllValidZipCodes()
return this.Get<List<string>>("http://somezipcodeapi.com/GetAll");