using System.Collections.Generic;
public static void Main()
new UnitTests().PerformUnitTest();
public void PerformUnitTest()
var sut = new CustomerValidator(new TestCustomerRepository(), new TestHttpClient());
var actual = sut.GetCustomerAndValidateZip(10);
CheckResult(expected,actual);
actual = sut.GetCustomerAndValidateZip(11);
CheckResult(expected,actual);
public void CheckResult(bool expected, bool actual)
var result = expected == actual ? "PASS" : "FAIL";
Console.WriteLine(result);
public class TestCustomerRepository : ICustomerRepository
List<Customer> custList = new List<Customer>(){new Customer{ID = 10, ZipCode = "21044" }, new Customer{ID = 11, ZipCode = "21043"}};
public Customer GetCustomer(int customerId)
return custList.FirstOrDefault(i => i.ID == customerId);
public class TestHttpClient : IHttpClient
public T Get<T>(string url)
List<string> d = new List<string>(){"21044"};
T zipcodes = (T)(object)d;
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)
var customer = _customerRepository.GetCustomer(customerId);
var allZipCodes = GetAllValidZipCodes();
return allZipCodes.Contains(customer.ZipCode);
private List<string> GetAllValidZipCodes()
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
public T Get<T>(string url)