在Xunit测试中调用变量后,为什么变量会自动更改?

时间:2019-07-04 09:03:53

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

我是使用Xunit测试的新手,正在测试一种将元素添加到List <>的方法。我的问题是,首先将空列表分配给名为check1的变量,然后将2个元素添加到列表中,然后将具有2个元素的列表分配给名为check2的变量。我不会说什么疯子,但是我意识到当我使用调试模式时,将元素添加到列表中时,变量check1会递增。

我真的不知道该怎么办。我的猜测是Xunits运行单元测试的方式很特殊,它可能同时运行多个测试,因此它会更改check1,但我不确定,因为我不了解Xunit的启动方式(或启动顺序)测试方法。

这是我的测试方法

<Select
    multi
    name='teamIdsFilter'
    menuPosition='fixed'
    options={crewOptions}
    value={teamIds}
    placeholder='Nepasirinktas'
    onChange={event => this.handleTeamIdsSelect(event)} />

这是我的AnalysisDataManager类方法:

[Fact]
public void addAnalysisDataTest()
        {
            List<AnalysisData> check1 = AnalysisDataManager.getInstance().getAnalysisData();
            AnalysisDataManager.getInstance().AddAnalysisData("Name3", true, new List<AnalysisElementData> { new AnalysisElementData(0, "Grid", "", ""), new AnalysisElementData(1, "PivotGrid", "", "") });
            AnalysisDataManager.getInstance().AddAnalysisData("Name4", true, new List<AnalysisElementData> { new AnalysisElementData(0, "Grid", "", ""), new AnalysisElementData(1, "PivotGrid", "", "") });
            List<AnalysisData> check2 = AnalysisDataManager.getInstance().getAnalysisData();
            Assert.True(Equals(check2.Count, check1.Count +2));
        }

如果您想知道我的其他测试方法是什么,请问我,我将更新这篇文章。

2 个答案:

答案 0 :(得分:1)

它与XUnit无关。您总是返回相同的列表,而不是副本,因此check1引用的列表与check2引用的列表完全完全相同,并且它们都< strong>完全与您的analysis实例中的私有AnalysisDataManager列表相同。因此,基本上,您对同一个列表具有三个引用,因此,当您将元素插入列表时,所有引用都会“看到”该元素。

如果您想返回列表的副本(可能应该保留封装),那么您的getAnalysisData应该返回analysis.ToList()

答案 1 :(得分:0)

在我看来,您的AnalysisDataManager是一个Singleton,因此,每当调用getInstance时,您都将获得该类的相同静态实例。如果您获得该类的相同实例,那么当您调用getAnalysisData()时,您将收到与响应相同的列表。

在这种情况下,您的测试是正确的,因为check1check2都是对同一列表的引用。