我正在看书,下面是一些代码:
[Fact]
public void Purchase_succeeds_when_enough_inventory()
{
// Arrange
var store = new Store();
store.AddInventory(Product.Shampoo, 10);
var customer = new Customer();
// Act
bool success = customer.Purchase(store, Product.Shampoo, 5);
// Assert
Assert.True(success);
Assert.Equal(5, store.GetInventory(Product.Shampoo));
}
[Fact]
public void Purchase_fails_when_not_enough_inventory()
{
// Arrange
var store = new Store();
store.AddInventory(Product.Shampoo, 10);
var customer = new Customer();
// Act
bool success = customer.Purchase(store, Product.Shampoo, 15);
// Assert
Assert.False(success);
Assert.Equal(10, store.GetInventory(Product.Shampoo));
}
作者说客户是SUT,商店是合作者
我在这里有点困惑,断言阶段也测试了商店,不是商店也是SUT吗?
最佳答案
SUT
代表被测系统,实际上意味着您要针对其执行操作的对象。
在断言阶段,您要检查假设,其中有一个actual
和expected
值。您正在根据预期验证实际值。
在上述代码中,Assert.Equal
首先接收期望值,然后接收实际值。这里的实际价值来自商店。
很好,因为Purchase方法调用表明库存应该减少,因为已经下达了采购订单
快乐路径:
-给定10件物品的清单
-当我购买5件商品时
-然后剩下5件
不愉快的道路:
-给定10件物品的清单
-当我尝试购买15件商品时
-然后我的购买将失败,库存保持不变。
为了更好地强调意图,您可以这样重写测试:
[Fact]
public void Purchase_succeeds_when_enough_inventory()
{
// Arrange
const int initialItemCount = 10;
const int intededPurchaseCount = 5;
var store = new Store();
var product = Product.Shampoo;
store.AddInventory(product, initialItemCount);
var customer = new Customer();
// Act
bool isSuccess = customer.Purchase(store, product, intededPurchaseCount );
// Assert
Assert.True(isSuccess);
var expectedInventoryCount = initialItemCount - intededPurchaseCount;
Assert.Equal(expectedInventoryCount, store.GetInventory(product));
}
[Fact]
public void Purchase_fails_when_not_enough_inventory()
{
// Arrange
const int initialItemCount = 10;
const int intededPurchaseCount = 15;
var store = new Store();
var product = Product.Shampoo;
store.AddInventory(product, initialItemCount);
var customer = new Customer();
// Act
bool isSuccess = customer.Purchase(store, product, intededPurchaseCount);
// Assert
Assert.False(isSuccess);
Assert.Equal(initialItemCount, store.GetInventory(product));
}
关于c# - 在单元测试中,如何确定哪个是SUT,哪个是协作者?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61361174/