SUT
означает Тестируемая система , что практически означает тот объект, в отношении которого вы выполняете ваше действие .
В проверяемой фазе ваши предположения, где есть actual
и expected
значение. Вы проверяете фактическое против ожидаемого.
В вышеупомянутом коде Assert.Equal
получает сначала ожидаемое значение, а затем фактическое. И здесь актуальная стоимость поступает из магазина. Это хорошо, потому что вызов метода Покупка указывает, что инвентарь должен уменьшиться, потому что покупка была размещена
Счастливый путь:
- При наличии инвентаря с 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));
}