using System.Collections.Generic;
public static void Main()
new UnitTests().PerformUnitTest();
private CustomerValidator _customerValidator;
private Customer _validCustomer;
private Customer _invalidCustomer;
public void PerformUnitTest()
CustomerValidator_ValidCustomerZipCode_ReturnsTrue();
CustomerValidator_InvalidCustomerZipCode_ReturnsFalse();
_validCustomer = new Customer()
_invalidCustomer = new Customer()
var customerRepository = A.Fake<ICustomerRepository>();
A.CallTo(() => customerRepository.GetCustomer(_validCustomer.ID)).Returns(_validCustomer);
A.CallTo(() => customerRepository.GetCustomer(_invalidCustomer.ID)).Returns(_invalidCustomer);
var httpClient = A.Fake<IHttpClient>();
A.CallTo(() => httpClient.Get<List<string>>(A<string>.Ignored)).Returns(
new List<string>() { _validCustomer.ZipCode });
_customerValidator = new CustomerValidator(customerRepository, httpClient);
private void CustomerValidator_ValidCustomerZipCode_ReturnsTrue()
HttpContext.Current.Profile.SetPropertyValue("CustomerId", _validCustomer.ID);
var output = _customerValidator.GetCustomerAndValidateZip();
PrintResult(true, output);
private void CustomerValidator_InvalidCustomerZipCode_ReturnsFalse()
HttpContext.Current.Profile.SetPropertyValue("CustomerId", _invalidCustomer.ID);
var output = _customerValidator.GetCustomerAndValidateZip();
PrintResult(false, output);
private void PrintResult(bool expected, bool actual)
var result = expected == actual ? "PASS" : "FAIL";
Console.WriteLine(result);
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 = (int)HttpContext.Current.Profile.GetPropertyValue("CustomerId");
var customer = _customerRepository.GetCustomer(customerId);
var allZipCodes = GetAllValidZipCodes();
return allZipCodes.Contains(customer.ZipCode);
private List<string> GetAllValidZipCodes()
return _httpClient.Get<List<string>>("http://fakeapi.forzipcodes.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 class HttpClient : IHttpClient
public T Get<T>(string url)