using System.Collections.Generic;
public static void Main()
new UnitTests().PerformUnitTest();
public void PerformUnitTest()
var sut = new CustomerValidator(new TestCustomerRepository(), new TestZipCodeService());
var actual = sut.GetCustomerAndValidateZip(1);
CompareResults(expected, actual);
actual = sut.GetCustomerAndValidateZip(2);
CompareResults(expected, actual);
private void CompareResults(bool expected, bool actual)
Console.WriteLine(expected == actual ? "PASS" : "FAIL");
public class CustomerValidator
ICustomerRepository _customerRepo;
IZipCodeService _zipService;
public CustomerValidator()
_customerRepo = new CustomerRepository();
_zipService = new ZipCodeService();
public CustomerValidator(ICustomerRepository customerRepo, IZipCodeService zipService)
_customerRepo = customerRepo;
_zipService = zipService;
public bool GetCustomerAndValidateZip(int? customerId = null)
var repository = new CustomerRepository();
customerId = (int)HttpContext.Current.Profile.GetPropertyValue("CustomerId");
var customer = _customerRepo.GetCustomer(customerId.Value);
var allZipCodes = _zipService.GetAllValidZipCodes();
return allZipCodes.Contains(customer.ZipCode);
public interface IZipCodeService
List<string> GetAllValidZipCodes();
public class ZipCodeService : IZipCodeService
public List<string> GetAllValidZipCodes()
var httpClient = new HttpClient();
return httpClient.Get<List<string>>("http://somezipcodeapi.com/GetAll");
public class TestZipCodeService : IZipCodeService
public List<string> GetAllValidZipCodes()
return new List<string>()
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 class TestCustomerRepository : ICustomerRepository
public TestCustomerRepository()
_context = new DbContext();
_context.Customers = new List<Customer>(){
public Customer GetCustomer(int customerId)
return _context.Customers.FirstOrDefault(c => c.ID == customerId);
public List<Customer> Customers { get; set; }
public T Get<T>(string url)