我正在看书,下面是一些代码:

[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代表被测系统,实际上意味着您要针对其执行操作的对象。

在断言阶段,您要检查假设,其中有一个actualexpected值。您正在根据预期验证实际值。



在上述代码中,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/

10-11 05:05