单元测试在一起运行时失败,单独传递

时间:2015-01-22 15:54:59

标签: c# unit-testing

所以我对我的单元测试有一些问题,我不能复制并在这里复制它们但是我会尽我所能。

问题似乎是,如果我逐个运行测试,一切都按预期工作,但如果我告诉它一起运行测试1/5将通过,

[TestMethod]

    public void ObjTest()
    {
        //Arrange - multiple ecus and items 
        var t = new var();
        t.itemNumbers = new List<ItemNumber>();

        obj e = new obj();
        e.property = "(12345 OR 55555) AND !65232";

        Globals.masterList.Add(e);

        ItemNumber i = new ItemNumber();
        i.num= "12345";

        ItemNumber i1 = new ItemNumber();
        i1.num= "55555";

        ItemNumber i2 = new ItemNumber();
        i2.num= "55556";
        t.itemNumbers.Add(i);
        t.itemNumbers.Add(i1); 
        t.itemNumbers.Add(i2);

        ICollection<Iinterface> tmp = new List<Iinterface>();

        //act, process the ecu and item lists
        ;
        functionCalled(t.itemNumbers, Globals.masterList, ref tmp);

        //assert, there should be only 2 added to the list
        Assert.AreEqual(1, tmp.Count, " ");
        Assert.AreEqual("(12345 OR 55555) AND !65232", functionCalled(t.itemNumbers, Globals.masterList, ref tmp), "Wrong obj returned.");

    }

所有的单元测试基本上都是副本和过去的chages到e.property并且可能更改为其中一个i号,

测试用于检查用户输入的边缘情况。

是否有一些我缺少的东西,以确保范围清除所有变量和测试之间的所有内容。或强制连续执行。

1 个答案:

答案 0 :(得分:1)

我建议考虑Globals.masterList.Add(e); 假设您的单元测试在五个线程中执行。这意味着Globals.masterList.Add(e);将被执行五次,或者masterList将被五个不同的线程修改。 然后你有下一行代码:

Assert.AreEqual("(12345 OR 55555) AND !65232", functionCalled(t.itemNumbers, Globals.masterList, ref tmp), "Wrong obj returned.");

functionCalled通过其他函数处理修改后的列表,并且作为结果,您有不同的输出,结果是单元测试失败