Я пытаюсь улучшить производительность модульных тестов в моем проекте. Если я пишу тест в одной логике, мне нужно написать другую логику в моем тесте. Я воспроизвожу это так:
У меня есть класс ProductInfo
public class ProductInfo
{
public string Name { get; set; }
public string Title { get; set; }
}
А класса Продукт:
public class Product
{
public ProductInfo Info { get; set; }
private decimal price;
public decimal Price
{
get
{
return price;
}
set
{
price = value;
Info.Title = $"{Info.Name}-{price} USD";
}
}
}
Я создаю юнит-тест для настройки Цена
[TestMethod]
public void ProductInfoTitleTest()
{
decimal price = 120;
string productName = "Product1";
ProductInfo info = new ProductInfo() { Name = productName };
Product product = new Product() { Info = info };
product.Price = price;
Assert.AreEqual($"{productName}-{price} USD", product.Info.Title, "Both should be equal");
}
Создан тестовый проход. Итак, я создаю еще одно свойство в классе Product:
public int Quantity { get; set; }
public decimal TotalPrice
{
get
{
return Price * Quantity;
}
}
Затем я создаю тест для тестирования TotalPrice:
[TestMethod]
public void ProductTotalPriceTest()
{
Product product = new Product
{
Price = 100,
Quantity = 2
};
Assert.AreEqual(200, product.TotalPrice, "It should be 200");
}
Этот тест не пройден, потому что я не установил информацию о продукте. Итак, я делаю это:
[TestMethod]
public void ProductTotalPriceTest()
{
Product product = new Product
{
Info = new ProductInfo(),
Price = 100,
Quantity = 2
};
Assert.AreEqual(200, product.TotalPrice, "It should be 200");
}
Тогда пройти тест. Есть ли способ сделать это без установки информации о продукте (без изменения логики)? Я надеюсь, что я мог понять вариант использования.