. net中的单元测试不起作用

本文关键字:不起作用 单元测试 net | 更新日期: 2023-09-27 18:15:41

我是单元测试场景的新手。真的新。

我尝试了几个例子,它工作。但是,现在我想试试这段代码:

O/p:实际输出:0,期望输出:75。这里,我的实际代码是虚拟数据。但如果我输入值,它就能工作。什么地方出了问题?

谁能告诉我一下。

. net中的单元测试不起作用

单元测试迫使您以不同的方式思考代码,正如您现在所发现的那样。在没有测试的情况下,由对该集合执行计算的同一个类实例化扫描项的私有字典似乎是有意义的。现在,很明显,这种耦合使得推断类的工作变得更加困难。

解决方案是使用依赖注入。重新定义被测类,使其接受扫描项字典作为构造函数参数。

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.");
}

GetTotalPrice()返回0,因为您的_scannedItems列表中没有任何内容。我假设您想计算出适用于初始化实际值的折扣,但是您正在测试的代码没有使用该折扣,而是使用scannedItems,您的单元测试没有填充任何内容。

您需要一个公共方法来将项目添加到列表中,然后您的单元测试应该调用该方法来将项目添加到列表中,并计算出适用于总数的折扣。

您没有向_scannedItems集合添加任何项,因此在函数内部它始终返回0,因为getTotalPrice()始终为0。

您忘记在TestCase中初始化_scannedItems字典。为了将来,您可以像调试正常代码一样调试测试(和方法代码)。

好吧,如果你不添加任何到_scannedItems,我想任何空篮子的折扣将永远是零…