NUnit和Typemock的奇怪问题

时间:2011-07-21 19:30:14

标签: c# visual-studio-2010 nunit typemock

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

我使用NUnit / Typemock时遇到了一些奇怪的问题。我对测试世界相对较新,所以它可能是初学者的错误。这就是我遇到的问题。

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

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

这是一个有问题的示例类。但是班级并不重要。无论先运行什么测试都有这个问题。异常代码只是测试Typemock被加载的东西。它在WhenCalled上失败了。

[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 argument = Something.Other()。GetStuff();
  • Isolate.WhenCalled(()=> ObjUnderTest.MethodUnderTest(argument))...;


  • 示例 - 这不起作用:

  • Isolate.WhenCalled(()=> ObjUnderTest.MethodUnderTest(Something.Other()。GetStuff()))...;

(结束错误消息)


任何人都知道为什么第一次测试总是失败但在重新运行时运行良好?关于如何装载装配的东西?

(编辑)其他详情:


版本: Typemock Isolator:6.0.10.0 Visual 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);
    }
}

2 个答案:

答案 0 :(得分:2)

我在Typemock工作,

这看起来很奇怪,因为这绝对不是来自它外观的嵌套调用。 您能否尝试通过电子邮件向我们发送一个小型解决方案,向support@typemock.com展示问题?

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

另外,您使用的是什么版本的Isolator?

答案 1 :(得分:2)

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

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

感谢您的帮助。

[编辑:更新] 如果其他人遇到此问题,请更新此内容。

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

在“设置”下: 测试装载机 - >组装隔离 - >默认流程模型 - > 直接在NUnit流程中运行测试

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