Bagi saya ini adalah unit-test yang sama sekali tidak relevan dan saya tidak mengerti mengapa seseorang akan menghabiskan waktu menulisnya, karena ada nilai yang sangat kecil untuk diperoleh darinya. Saya akan tahu betul jika controller ini mengembalikan tipe yang diinginkan dengan mengeksekusi metode di browser. Sungguh, apakah Anda percaya tes diperlukan untuk ini dan mengapa?
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
hiasan
sumber
sumber
Jawaban:
Poin kunci mereka ada di sini:
Unit-tesing adalah tentang otomatisasi pengujian non-regresi unit kode sederhana, bukan Anda melihat diri Anda sendiri. Anda tidak ingin melakukannya sendiri selalu menguji unit dalam aplikasi Anda.
EDIT: Menambahkan komentar @anotherdave:
Ini tentang kemudahan penskalaan. Menguji satu pengontrol di browser mungkin OK; bagaimana dengan 10, 20, 50 pengendali? Anda akan menulis tes satu kali; Anda mungkin perlu memperbaruinya saat Anda mengganti controller, yang merupakan overhead. Tetapi seberapa sering Anda menyebarkan? Tentunya pemeriksaan manual setiap kali ada lebih banyak overhead yang tes
Sebagai alternatif untuk jawaban @ Vladislav , unit testing benar-benar semuanya bisa menjadi berlebihan, dan benar-benar tidak diinginkan. Jika Anda membutuhkan sesuatu yang lebih ringan, Anda dapat melakukan pengujian non-regresi tingkat tinggi menggunakan Selenium. Tentunya Anda akan mendapatkan cakupan yang lebih sedikit daripada pengujian unit, tetapi Anda bisa mendapatkan cakupan yang dapat dinaikkan yang membutuhkan biaya lebih sedikit waktu untuk melakukan pengujian unit dan lebih fleksibel.
Yaitu, jika Anda menguji semua yang Anda miliki untuk memperbarui satu atau lebih tes setiap kali Anda memodifikasi elemen sederhana.
sumber
I would know perfectly well if this controller returned the wanted type by executing the method in a browser.
- ini tentang kemudahan penskalaan. Menguji satu pengontrol di browser mungkin OK; bagaimana dengan 10, 20, 50 pengendali? Anda akan menulis tes satu kali; Anda mungkin perlu memperbaruinya saat Anda mengganti controller, yang merupakan overhead. Tetapi seberapa sering Anda menyebarkan ? Tentunya pemeriksaan manual setiap kali ada lebih banyak overhead yang tes.Karena tanpa mengetahui konteksnya Anda tidak dapat mengatakan dengan pasti apakah Anda perlu menguji ini atau itu. Berikut adalah beberapa alasan, mengapa Anda mungkin ingin menguji pengontrol:
sumber
Saya sepenuhnya setuju dengan OP.
Tes unit untuk pengontrol tidak ada gunanya. Anda menguji pengendali Anda secara implisit melalui tes regresi (menggunakan Selenium misalnya).
Anda harus TDD semua komponen / objek yang digunakan pengontrol dan menjaga pengontrol setipis mungkin. Kemudian semuanya diuji dengan benar. Yang ingin Anda yakini adalah semuanya bekerja dengan baik bersama saat melakukan permintaan web. Itu uji regresi.
sumber