我是单元测试场景的新手。真的很新。
我尝试了几个例子并且有效。 但是,现在我想尝试这段代码:
O / P:我得到的输出是实际的:0和预期:75。 在这里,我的实际代码是虚拟数据。但如果我输入值,它就有效。 什么事,出错了?
请有人告诉我。
答案 0 :(得分:1)
GetTotalPrice()返回0,因为你的_scannedItems列表中没有任何内容。我假设你想要计算出适用于初始化实际值的折扣,但是你测试的代码并没有使用它,它使用的是scanItems,你的单元测试并没有这样做。 t填充任何东西。
您需要一种公共方法来将项目添加到列表中,然后您的单元测试应该调用该项目以将项目添加到列表中并计算出适用于总计的折扣。
答案 1 :(得分:1)
单元测试迫使您以不同的方式思考代码,就像您现在发现的那样。在没有测试的情况下,拥有一个由同一个类实例化的扫描项的私有字典似乎是有意义的,该类对该集合执行计算。现在,很明显,这种耦合使得你更难以推断你的课程。
解决方案是使用依赖注入。重新定义测试中的类以将扫描的项目字典作为构造函数参数。
public class Register
{
private Dictionary<Int, Item> _scannedItems;
public Register(Dictionary<Int, Item> scannedItems)
{
_scannedItems = scannedItems;
}
// ... the rest as usual
}
现在,您可以针对每项测试以不同方式设置扫描项目词典。
[TestMethod]
public void applyDiscountByPercentTest()
{
var scannedItems = new Dictionary<Int, Items>() {
/* init with items */
};
Register target = new Register(scannedItems);
double discountPercent = 25;
double expected = 75;
actual = target.applyDiscountByPercent(discountPercent);
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Verify the correctness of this test method.");
}
答案 2 :(得分:0)
您尚未向_scannedItems
集合中添加任何项目,因此在函数内部始终返回0,因为getTotalPrice()
始终为0.
答案 3 :(得分:0)
您忘记在TestCase中初始化_scannedItems
字典。将来,您可以像普通代码一样调试测试(和方法代码)。
答案 4 :(得分:0)
好吧,如果您没有向_scannedItems添加任何内容,我认为空篮子的任何折扣总是会导致零...