using System.Collections.Generic;
public static void Main()
new UnitTests().PerformUnitTest();
public void PerformUnitTest()
var sut = new CustomerValidator(new MockCustomerRepository(), new MockHttpContextCustomer(5), new MockValidZipCodesCustomer());
var actual = sut.GetCustomerAndValidateZip();
var result = expected == actual ? "PASS" : "FAIL";
Console.WriteLine(result);
sut = new CustomerValidator(new MockCustomerRepository(), new MockHttpContextCustomer(25), new MockValidZipCodesCustomer());
actual = sut.GetCustomerAndValidateZip();
result = expected == actual ? "PASS" : "FAIL";
Console.WriteLine(result);
public class CustomerValidator
private IDataRepo _dataRepo;
private IHttpContextCustomer _httpContextCustomer;
private IValidZipCodes _validZipCodes;
public CustomerValidator(IDataRepo dataRepo, IHttpContextCustomer httpContextCustomer, IValidZipCodes validZipCodes)
_httpContextCustomer=httpContextCustomer;
_validZipCodes=validZipCodes;
public bool GetCustomerAndValidateZip()
int customerId = _httpContextCustomer.GetPropertyValue();
var customer = _dataRepo.GetCustomer(customerId);
var allZipCodes = _validZipCodes.GetAllValidZipCodes();
return allZipCodes.Contains(customer.ZipCode);
public interface IValidZipCodes{
List<string> GetAllValidZipCodes();
public class ValidZipCodesCustomer:IValidZipCodes{
public List<string> GetAllValidZipCodes()
var httpClient = new HttpClient();
return httpClient.Get<List<string>>("http://somezipcodeapi.com/GetAll");
public class MockValidZipCodesCustomer:IValidZipCodes{
public List<string> GetAllValidZipCodes()
return new List<string>(new string[] {"11111","22222"});
public interface IHttpContextCustomer{
public class HttpContextCustomer: IHttpContextCustomer{
public int GetPropertyValue(){
return (int)HttpContext.Current.Profile.GetPropertyValue("CustomerId");
public class MockHttpContextCustomer: IHttpContextCustomer{
public MockHttpContextCustomer(int customerID){
public int GetPropertyValue(){
public int ID { get; set; }
public string ZipCode { get; set; }
public interface IDataRepo{
Customer GetCustomer(int customerId);
public class CustomerRepository: IDataRepo
public Customer GetCustomer(int customerId)
var db = new DbContext();
return db.Customers.SingleOrDefault(i => i.ID == customerId);
public class MockCustomerRepository: IDataRepo
private IList<Customer> _customers;
public MockCustomerRepository(){
IList<Customer> customers = new List<Customer>(){
new Customer(){ID=5, ZipCode="11111"},
new Customer(){ID=25, ZipCode="aaaaa"}
public Customer GetCustomer(int customerId)
return _customers.SingleOrDefault(i => i.ID == customerId);
public List<Customer> Customers { get; set; }
public T Get<T>(string url)