Tôi đang đọc Clean Code: A Handbook of Agile Software Craftsmanship
và một trong các ví dụ liên quan đến lớp học Portfolio
và lớp học TokyoStockExchange
. Tuy nhiên, Portfolio
không phải là rất có thể kiểm chứng bởi vì nó phụ thuộc vào TokyoStockExchange
làm API bên ngoài để xác định giá trị của danh mục đầu tư và đó là một tra cứu dễ bay hơi và không có lợi cho việc thử nghiệm.Bối rối về lý do tại sao nó hữu ích đối với các đối tượng giả thử nghiệm đơn vị
Vì vậy, chúng giải quyết vấn đề này bằng cách tạo giao diện chung StockExchange
và có TokyoStockExchange
và DummyStockExchange
cả hai đều triển khai lớp cơ sở. Do đó, nguyên tắc nghịch đảo phụ thuộc được đạt tới và trong lớp PortfolioTest
có thể khởi tạo DummyStockExchange
, sửa giá cổ phiếu thành công ty, gán trường hợp DummyStockExchange
vào danh mục và thêm một số cổ phiếu từ công ty đó vào danh mục, và sau đó xác nhận xem giá trị kỳ vọng thực sự là giá trị phù hợp. Đây là mã:
public class PortfolioTest
{
private DummyStockExchange exchange;
private Portfolio portfolio;
protected void setUp()
{
exchange = new DummyStockExchange();
exchange.fix("MSFT", 100);
portfolio = new Portfolio(exchange);
}
public void GivenFiveMSFTTotalShouldBe500()
{
portfolio.add(5, "MSFT");
Assert.assertEquals(500, portfolio.value());
}
}
Câu hỏi của tôi, chỉ đơn giản là, là tại sao?
Chúng tôi đã thử nghiệm nếu lớp TokyoStockExchange
hoạt động song song với lớp học Portfolio
. Rõ ràng nếu chúng ta tạo ra một lớp khác với một phương pháp mới đặt giá cổ phiếu và sau đó cung cấp danh mục đầu tư năm trong số những cổ phiếu đó thì mọi thứ sẽ hoạt động. Nó chỉ có vẻ .. vô dụng để kiểm tra. Tôi hiểu rằng TokyoStockExchange
về cơ bản là không thể kiểm tra với Portfolio
vì giá cổ phiếu thay đổi nhưng tôi không hiểu làm thế nào subbing trong một thử nghiệm khá vô ích giúp tình hình. Tất cả chỉ có vẻ như không biết liệu chương trình bổ trợ của chúng tôi có hoạt động hay không nhưng chỉ có các số duy nhất được tạo ngẫu nhiên để chúng tôi tạo một lớp giả cho chúng ta 2 và kiểm tra nếu 2 + 2 = 4
. Vâng vâng, rõ ràng đó là sự thật. Chúng tôi vẫn có thể vi phạm TokyoStockExchange
và thử nghiệm sẽ vẫn thành công vì thử nghiệm một lớp khác. Nếu bất cứ điều gì tất cả điều này có vẻ lừa đảo và nó cũng dẫn đến việc phải viết mã bổ sung chỉ để kiểm tra một cái gì đó chúng ta biết là sẽ làm việc.
Tôi nghĩ đây là vấn đề lớn nhất mà tôi có với sự hiểu biết về Kiểm thử đơn vị tại thời điểm này. Tôi biết rằng tôi sai, tôi đã không nhìn thấy ánh sáng tôi đoán. Hy vọng rằng ai đó có thể giúp tôi ra.
Để tham khảo ... nếu bạn đang thử nghiệm 'TokyoStockExchange' hoạt động * với *' Danh mục đầu tư', bạn nằm ngoài phạm vi kiểm tra đơn vị. 'Portfolio' và' TokyoStockExchange' là các đơn vị, và thử nghiệm đơn vị được thiết kế để kiểm tra từng đơn vị * riêng biệt với nhiều đơn vị khác nhất có thể (tốt nhất là tất cả). Sự tương tác giữa chúng là những gì * kiểm tra tích hợp * bao gồm. – cHao
+1 để cố gắng hiểu giá trị chứ không phải là thổi tắt thử nghiệm đơn vị với "đó là nhiều công việc để duy trì mã đó, quá" –
Đây thực sự là một câu hỏi cho [programmers.se]. –