以下のように、その操作が依存関係に依存するメソッドがあります。単体テストを行う価値はまだありますか?単体テストはモックによってではなく、ビジネス ロジックをテストしていないためです。
以下の単体テスト:
expectedCustomerValidality
メソッドの操作は、テストによってセットアップされるによって決定されることに注意してください。ほとんどの場合、ロジックはモックによって決定されます (例: Setup(c => c.IsValid())
.
[Test]
[TestCase(true)]
[TestCase(false)]
public void AddCustomer(bool expectedCustomerValidality)
{
//using Moq
companyRepositoryMock.Setup(c => c.GetById(It.IsAny<int>())).Returns(new Company());
customerValidatorMock.Setup(c => c.IsValid(It.IsAny<Customer>())).Returns(expectedCustomerValidality);
var customer = new Customer
{
Firstname = "firstName",
Surname = "surname",
Company = new Company { Id = 1 }
};
var addCustomer = customerServiceSut.AddCustomer(customer);
Assert.AreEqual(expectedCustomerValidality,addCustomer);
}
以下のプロダクションコード:
public class CustomerService : ICustomerService
{
private ICompanyRepository companyRepository;
private ICustomerRepository customerRepository;
private ICustomerValidator customerValidator;
public CustomerService(ICompanyRepository companyRepository, ICustomerRepository customerRepository, ICustomerValidator customerValidator)
{
this.companyRepository = companyRepository;
this.customerRepository = customerRepository;
this.customerValidator = customerValidator;
}
public bool AddCustomer(Customer customer)
{
customer.Company = companyRepository.GetById(customer.Company.Id); ;
if (customerValidator.IsValid(customer))
{
customerRepository.AddCustomer(customer);
return true;
}
return false;
}
}
質問:
- AddCustomer() には単体テストが必要ですか?
もしそうなら、現在の単体テストは正しい方法で実行されていますか?
1 そうでない場合、それを単体テストする適切な方法は何ですか?