Есть несколько подходов, которые вы можете использовать. Хотя это и не обязательно лучшее решение, вот то, которое не требует от вас изменения существующего API. Предполагается, что SHA1Hasher.ComputeHash является открытым методом.
[TestClass]
public class CustomerServiceTest
{
[TestMethod]
public void Add_Should_Compute_Password_Hash_Before_Saving()
{
var customer = new Customer { Password = "Foo" };
var expectedHash = SHA1Hasher.ComputeHash(customer.Password);
var repoMock = new Mock<ICustomerRepository>();
repoMock
.Setup(r => r.Add(It.Is<Customer>(c => c.PasswordHash == expectedHash)))
.Returns(1)
.Verifiable();
// invoke service with customer and repoMock.Object here...
repoMock.Verify();
}
}
Несколько лучшим решением было бы превратить SHA1Hasher во внедренную службу (например, IHasher), чтобы вы могли подтвердить, что свойству PasswordHash присвоено значение, созданное экземпляром IHasher.
Открыв свой API еще больше, вы можете сделать свойство PasswordHash виртуальным, чтобы можно было передать Mock Customer методу AddCustomer, чтобы убедиться, что свойство установлено правильно.