我是使用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));
}
如果您想知道我的其他测试方法是什么,请问我,我将更新这篇文章。
答案 0 :(得分:1)
它与XUnit无关。您总是返回相同的列表,而不是副本,因此check1
引用的列表与check2
引用的列表完全完全相同,并且它们都< strong>完全与您的analysis
实例中的私有AnalysisDataManager
列表相同。因此,基本上,您对同一个列表具有三个引用,因此,当您将元素插入列表时,所有引用都会“看到”该元素。
如果您想返回列表的副本(可能应该保留封装),那么您的getAnalysisData
应该返回analysis.ToList()
。
答案 1 :(得分:0)
在我看来,您的AnalysisDataManager
是一个Singleton,因此,每当调用getInstance
时,您都将获得该类的相同静态实例。如果您获得该类的相同实例,那么当您调用getAnalysisData()
时,您将收到与响应相同的列表。
在这种情况下,您的测试是正确的,因为check1
和check2
都是对同一列表的引用。