Mam metodę, której operacje zależą od jej podopiecznych, jak poniżej. Czy nadal warto wykonywać test jednostkowy? Ponieważ test jednostkowy nie testuje żadnej logiki biznesowej, a raczej przez mocks.Czy test jednostki może wykonywać podwójne obciążanie, akceptując wartość logiczną jako przełącznik, czy też powinienem napisać dwa oddzielne testy, które powielają kod testowy?
testów jednostkowych poniżej:
Uwaga opetions metoda jest określana przez expectedCustomerValidality
, który jest ustawiony w teście. Głównie, logika jest określana przez mocks (np 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);
}
kod Produkcja poniżej.
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;
}
}
pytania:
- Czy AddCustomer() wymagana jednostka testowanie
Jeśli tak, czy aktualny test jednostki działa prawidłowo?
1 Jeśli nie, jaki jest właściwy sposób testowania urządzenia?
1. Wszystkie metody zawierające nietrywialną logikę powinny być testowane w jednostce. 2. Co rozumiesz przez "poprawny?" –
1. Masz na myśli, że AddCustomer zawiera nietrywialną logikę. Ale to zależy od zależności, która jest wyśmiewana. 2. W teście, jeśli gałąź jest określona przez fałszywy obiekt. – Pingpong