【问题标题】:xUnit Testing says System.NullReferenceExceptionxUnit 测试说 System.NullReferenceException
【发布时间】:2018-03-27 13:54:17
【问题描述】:

早安,

我是 xUnit 的初学者,我遇到了这个错误,上面写着“System.NullReferenceException : Object reference not set to an instance of an object.

这是我的代码,它测试规则名称是否取决于季节。

public class UnitTest1
{
    private CalculateDiscount calculateDiscount;

    [Fact]
    public void Setup()
    {
        calculateDiscount = new CalculateDiscount();
    }

    [Theory]
    [InlineData(10.00, "Summer", 100.00)]
    public void WhenRuleName_Is_Summer_Return_Valid(decimal amount, string ruleName, decimal expected)
    {
        var result = calculateDiscount.CalculateDiscountSalary(amount, ruleName);

        Assert.Equal(expected, result);
    }
}

这是我的实际实现

public class CalculateDiscount
{
    public decimal CalculateDiscountSalary(decimal amount, string ruleName)
    {
        if (ruleName.Equals("Summer"))
        {
            return amount * 10.00M;
        }
        else if (ruleName.Equals("Winter"))
        {
            return amount * 15.00M;
        }
        else
        {
            return amount * 20.00M;
        }
    }
}

提前谢谢你。

【问题讨论】:

  • 抛出的错误在哪里。我已经知道但想看看你是否可以从这个过程中学习如何调试。到目前为止,您尝试过什么来解决您的问题?
  • 太好了,在那个方法中什么可能是空的?为什么?学习单步调试代码。
  • 把断点放在var的行上
  • 哦,我使用 Debug Selected Test 先生,但 calculateDiscount 为空。虽然所有参数都有一个值
  • 当断点命中时,检查该点变量的状态

标签: c# unit-testing xunit xunit.net


【解决方案1】:

事实不必在理论之前运行。

您的设置必须是您的构造函数。如果你把你的设置函数改成构造函数,你的空引用异常问题就解决了

public UnitTest1()
{
    calculateDiscount = new CalculateDiscount();
}

【讨论】:

    【解决方案2】:

    我猜你对 XUnit 和 NUnit 感到困惑。

    NUnit 提供了一个SetUp Fixture 来初始化你可以重复使用的变量。

    目前,XUnit 还没有。但是有workarounds

    【讨论】:

      猜你喜欢
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多