using System.Collections.Generic;
public static void Main()
new UnitTests().PerformUnitTest();
public void PerformUnitTest()
var customerValidator = new CustomerValidator(new MockCustomerRepository(), new MockZipCodeService());
var result1 = customerValidator.ValidateCustomerZipByCustomerId(1) ? "PASS" : "FAIL";
Console.WriteLine(result1);
var result2 = customerValidator.ValidateCustomerZipByCustomerId(2) ? "FAIL" : "PASS";
Console.WriteLine(result2);
public class CustomerValidator
private ICustomerRepository _customerRepository;
private IZipCodeService _zipCodeService;
public CustomerValidator(ICustomerRepository customerRepository, IZipCodeService zipCodeService)
_customerRepository = customerRepository;
_zipCodeService = zipCodeService;
public CustomerValidator()
_customerRepository = new CustomerRepository();
_zipCodeService = new ZipCodeService();
public bool GetCustomerAndValidateZip()
var customerId = (int) HttpContext.Current.Profile.GetPropertyValue("CustomerId");
return ValidateCustomerZipByCustomerId(customerId);
public bool ValidateCustomerZipByCustomerId(int customerId)
var customer = _customerRepository.GetCustomer(customerId);
var allZipCodes = _zipCodeService.GetAllValidZipCodes();
return allZipCodes.Contains(customer.ZipCode);
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 MockCustomerRepository : ICustomerRepository
private List<Customer> customerRepository = new List<Customer>
public Customer GetCustomer(int customerId)
return customerRepository.FirstOrDefault(x => x.ID == customerId);
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 MockZipCodeService : IZipCodeService
public List<string> GetAllValidZipCodes()
return new List<string> { "22202" };
public List<Customer> Customers { get; set; }
public T Get<T>(string url)