NUnit和Typemock有个奇怪的问题

本文关键字:问题 Typemock NUnit | 更新日期: 2023-09-27 18:02:57

使用VS 2010, NUnit, Typemock, Entity Framework…

我有一点奇怪的问题使用NUnit/Typemock。我是测试界的新手,所以这可能是初学者的错误。这就是我遇到的问题。

  • 测试项目已编译。
  • 从Visual Studio内启动NUnit
  • 从NUnit客户端应用程序中运行测试。第一次运行,第一次测试总是失败。
  • 重新运行,测试通过。

先做哪个测试并不重要。我可以选择一个特定的测试。如果它是第一个运行的,则在第一次执行时失败。

这是一个有问题的示例类。但是班级并不重要。首先运行的任何测试都有这个问题。异常代码只是用来测试Typemock被加载的。

[TestClass, Isolated]
public class FirstTest
{
    [TestMethod]
    public void TestMe()
    {
        Exception e = new TypeMock.ArrangeActAssert.NestedCallException();
        Isolate.WhenCalled(() => UnitOfWorkManager.GetCurrentSession(null)).WillReturn(null);
        Assert.IsTrue(true);
    }
}

错误信息如下:


HCSO.ESL.Test.Fakes.FirstTest.TestMe:TypeMock.ArrangeActAssert.NestedCallException:* WhenCalled不支持使用属性调用作为参数。-要修复此问题,传递false而不是AssemblyReader。IsDotNetFile


  • 示例-这将工作:
  • MyObj参数= Something.Other().GetStuff();
  • isolation . whencalled (() => ObjUnderTest.MethodUnderTest(argument))…;


  • 示例:

  • isolation . whencalled (() => ObjUnderTest.MethodUnderTest(Something.Other().GetStuff()))…;

(结束错误信息)


谁知道为什么第一次测试总是失败,但运行良好的重新运行?程序集是如何加载的?

(编辑)更多细节:


版本:类型模型隔离器:6.0.10.0Visual Studio: 10.0.30319.1

另外,我添加了简化的测试代码。这样您就可以看到正在测试的代码。是的,这个测试第一次失败,之后的每次运行都通过。

[TestClass, Isolated]
public class FirstTest
{
    public static int DummyCall(int i)
    {
        return 0;
    }
    [TestMethod]
    public void TestMe()
    {
        Exception e = new TypeMock.ArrangeActAssert.NestedCallException();
        //Isolate.WhenCalled(() => UnitOfWorkManager.GetCurrentSession(null)).WillReturn(null);
        Isolate.WhenCalled(() => FirstTest.DummyCall(-1)).WillReturn(1);
        Assert.IsTrue(true);
    }
}

NUnit和Typemock有个奇怪的问题

我在Typemock工作,

看起来很奇怪,因为从表面上看这绝对不是一个嵌套调用。你能试着给我们发一个小的解决方案来演示这个问题到support@typemock.com吗?

UnitOfWorkManager是什么?这是属于EF的类,还是你的代码?

另外,您使用的是哪个版本的隔离器?

我解决了这个问题。正如我所料,这在一定程度上是新手犯的错误。在NUnit内部,有一个设置来确定程序集是如何隔离的。默认选项是在与NUnit相同的进程中运行测试。我尝试在每个程序集的单独进程中更改隔离,问题消失了。

重现错误。*确保选中"直接在NUnit进程中运行测试"的NUnit选项。*关闭NUnit(只是为了确保设置被使用)*从VS中启动NUnit。*选择包含isolation . whenc被叫()的测试*先运行测试

谢谢你的帮助。

(编辑:更新)如果其他人有此问题,则更新此内容。

我发现在NUnit客户端中,如果我设置以下选项,一切都很好。

下设置:Test Loader -> Assembly Isolation -> Default Process Model -> 直接在NUnit进程中运行Test

测试加载程序->程序集隔离->默认域使用-> 为每个程序集使用单独的AppDomain