giả sử tôi có một số OrderProcessor
s, mỗi người trong số họ xử lý một đơn đặt hàng một chút khác nhau.
Quyết định về những OrderProcessor
sử dụng được thực hiện theo các thuộc tính của đối tượng Order
, và được thực hiện bằng một phương pháp nhà máy, như vậy:đơn vị thử nghiệm một phương pháp nhà máy
public IOrderProcessor CreateOrderProcessor(IOrdersRepository repository, Order order, DiscountPercentages discountPercentages)
{
if (order.Amount > 5 && order.Unit.Price < 8)
{
return new DiscountOrderProcessor(repository, order, discountPercentages.FullDiscountPercentage);
}
if (order.Amount < 5)
{
// Offer a more modest discount
return new DiscountOrderProcessor(repository, order, discountPercentages.ModestDiscountPercentage);
}
return new OutrageousPriceOrderProcessor(repository, order);
}
Bây giờ, vấn đề của tôi là tôi muốn xác minh rằng trả lại OrderProcessor
đã nhận được thông số chính xác (ví dụ: tỷ lệ phần trăm giảm giá chính xác).
Tuy nhiên, các thuộc tính đó không được công khai trên các đối tượng OrderProcessor
.
Bạn đề xuất tôi xử lý tình huống này như thế nào?
Giải pháp duy nhất tôi đã có thể đưa ra được làm tài sản tỷ lệ chiết khấu của OrderProcessor
s công cộng, nhưng nó có vẻ như một overkill để làm điều đó chỉ với mục đích kiểm tra đơn vị ...
Trong khi điều này là tốt và có vẻ hợp lý khi muốn biết rằng tỷ lệ chiết khấu chính xác đang được sử dụng, nếu không ai đó có thể thay đổi mã để làm cho cả hai đường dẫn trở lại 'discountPercentages.FullDiscountPercentage' và không ai biết, và tất cả những người bất ngờ sẽ bắt đầu nhận được giảm giá đầy đủ chứ không phải là mức khiêm tốn –
Ok, hãy tạo ra DiscountOrderProcessor trong một phương thức ảo và đảm bảo nó được gọi với các tham số thích hợp dựa trên logic nhà máy của bạn. – PatrickSteele
Tôi sẽ phải đồng ý với Patrick. Nghe có vẻ như bạn đang mạo hiểm ra khỏi thử nghiệm đơn vị vào thử nghiệm tích hợp (đó là quan trọng là tốt). Thử nghiệm đơn vị là cho một đơn vị logic và mỗi bộ xử lý đơn hàng phải có các thử nghiệm đơn vị riêng của nó. –