具体而言,我有一个PurchaseOrderCollection类,它具有传递给构造函数的PurchaseOrders的私有列表,并且PurchaseOrders具有一个布尔属性IsValid。 PurchaseOrderCollection具有一个HasErrors属性,如果列表中的任何PurchaseOrders的IsValid为false,则返回true。 这是我想要测试的逻辑。
[TestMethod]
public void Purchase_Order_Collection_Has_Errors_Is_True_If_Any_Purchase_Order_Has_Is_Valid_False()
{
List<PurchaseOrder> orders = new List<PurchaseOrder>();
orders.Add(new PurchaseOrder(--some values to generate IsValid false--));
orders.Add(new PurchaseOrder(--some values to generate IsValid true--));
PurchaseOrderCollection collection = new PurchaseOrderCollection(orders);
Assert.IsTrue(collection.HasErrors);
}
这与我的上一个问题类似,即这个测试过于耦合,因为我必须知道使PurchaseOrder IsValid为false或true的逻辑才能通过测试,而实际上这个测试不应该关心这些。问题不同(在我看来),因为类本身不是问题。
本质上,我想能够声明一个PurchaseOrder,其IsValid为false或true,而不需要了解有关PurchaseOrder的任何其他信息。
根据我有限的TDD知识,这是使用存根或模拟对象的方法。我的主要问题是,这样做正确吗?还是我应该使用其他方法?或者我完全错了,只是在错误地编写和思考这个测试?
我的最初想法是只需使用某种模拟框架并创建一个始终返回true或false的PurchaseOrder。然而,根据我所读的,我需要将IsValid声明为虚拟的。因此,我的第二个想法是将其更改为为PurchaseOrder添加IPurchaseOrder作为接口,并创建一个始终返回false或true的虚假PurchaseOrder。这两个想法都是有效的吗?
谢谢!