Dla mnie jest to całkowicie nieistotny test jednostkowy i nie rozumiem, dlaczego ktoś spędzałby czas na pisaniu go, ponieważ bardzo niewiele można z niego zyskać. Wiedziałbym doskonale, czy ten kontroler zwrócił pożądany typ, wykonując metodę w przeglądarce. Naprawdę, czy uważasz, że do tego potrzebny jest test i dlaczego?
public class ConstituencyControllerTests
{
private ConstituencyController _constituencyController;
private Mock<IConstituencyService> _IConstituencyServiceMock;
public ConstituencyControllerTests() {
_IConstituencyServiceMock = new Mock<IConstituencyService>();
}
[Test]
public async Task I_Check_For_Return_Type_And_Result() {
_constituencyController = new ConstituencyController( _IConstituencyServiceMock.Object );
var result = await _constituencyController.Get();
var content = ( (dynamic)result ).Content;
Assert.IsEmpty( content );
Assert.IsInstanceOf( typeof( System.Web.Http.Results.OkNegotiatedContentResult<IEnumerable<ListOfConstituencies>> ), result );
_IConstituencyServiceMock.Verify( x => x.ListOfConstituencies(), Times.Once() );
}
}
unit-testing
lukier
źródło
źródło
Odpowiedzi:
Kluczową kwestią jest tutaj:
Tesing jednostek polega na automatyzacji testowania nierejestracyjnego prostych jednostek kodu, a nie na tym, że wyglądasz sam. Nie chcesz robić zawsze jednostkowych modyfikacji w swojej aplikacji.
EDYCJA: Dodawanie komentarza @anotherdave:
Chodzi o łatwość skalowania. Testowanie jednego kontrolera w przeglądarce może być OK; a co z 10, 20, 50 kontrolerami? Raz napiszesz test; konieczne może być zaktualizowanie go po zmianie kontrolera, co jest narzutem. Ale jak często wdrażasz? Z pewnością ręczna kontrola za każdym razem, gdy jest znacznie więcej kosztów ogólnych niż w teście
Jako alternatywa dla odpowiedzi @ Vladislava testowanie jednostkowe absolutnie wszystkiego może być przesadą i naprawdę niepożądane. Jeśli potrzebujesz czegoś lżejszego, możesz przeprowadzić testy regresji wyższego poziomu za pomocą Selenium. Z pewnością uzyskasz mniejszy zasięg niż testy jednostkowe, ale możesz uzyskać raisonable zasięg, który kosztuje o wiele mniej czasu na testowanie jednostkowe i jest bardziej elastyczny.
Oznacza to, że jeśli przetestujesz wszystko, musisz zaktualizować jeden lub więcej testów za każdym razem, gdy modyfikujesz prosty element.
źródło
I would know perfectly well if this controller returned the wanted type by executing the method in a browser.
- chodzi o łatwość skalowania. Testowanie jednego kontrolera w przeglądarce może być OK; a co z 10, 20, 50 kontrolerami? Raz napiszesz test; konieczne może być zaktualizowanie go po zmianie kontrolera, co jest narzutem. Ale jak często wdrażasz ? Z pewnością ręczna kontrola za każdym razem, gdy jest znacznie więcej kosztów ogólnych niż w teście.Ponieważ bez znajomości kontekstu nie można powiedzieć na pewno, czy trzeba to lub tamto przetestować. Oto kilka powodów, dla których warto przetestować kontrolery:
źródło
Całkowicie zgadzam się z PO.
Test jednostkowy kontrolera jest bezcelowy. Testujesz swoje kontrolery niejawnie za pomocą testów regresyjnych (na przykład używając Selenium).
Powinieneś TDD wszystkie komponenty / obiekty, których używa kontroler i utrzymywać kontrolery tak cienkie, jak to możliwe. Następnie wszystko jest odpowiednio testowane jednostkowo. Chcesz mieć pewność, że wszystko działa dobrze podczas wykonywania żądań internetowych. To testy regresji.
źródło