无法开始使用Moq和Nunit

Bre*_*dan 14 c# nunit moq

试图让一个非常简单的测试场景工作,让我的头靠在墙上.我确定我错过了一些非常简单的东西!

无论我做什么,当我对我的DLL运行测试时,我似乎从NUnit gui中得到以下错误: System.TypeLoadException:从程序集'DynamicProxyGenAssembly2输入'Castle.Proxies.ITestProxy',Version = 0.0.0.0,Culture = neutral, PublicKeyToken = null'正在尝试实现无法访问的接口.

现在,我在堆栈溢出和其他地方看到大量地方引用了这个错误,但我一直找到的解决方案似乎没有帮助.而且我现在甚至没有使用内部接口!我在这个地方看到的解决方案也在AssemblyInfo.cs中添加了以下行

[assembly:InternalsVisibleTo("DynamicProxyGenAssembly2")]

我正在使用:

  • Visual Studio 2010 Professional
  • c#4.0
  • Moq 4.10810.8 Beta(已部署bin)
  • NUnit 2.5.5(安装在GAC中)

要重新创建此错误,我需要做的就是:

  1. 创建一个新的类库项目
  2. 参考Moq和单位(如上)
  3. 创建一个界面.我把我的界面称为ITest,将其公之于众,它有一个方法是'string TestMethod();'.为简单起见,我在本地项目中这样做.
  4. 创建一个名为'Testing'的类,用[TextFixture]修饰,一个名为'TestMethod'的测试方法用[Test]修饰
  5. 构建项目,然后针对Debug文件夹中生成的dll运行NUnit.

这是我的测试类的内容

namespace MoqTest {
[TestFixture]
public class Testing {
    [Test]
    public void TestMethod() {

        var testMock = new Mock<ITest>();
        testMock.Setup(x => x.TestMethod()).Returns("String val");
        var xyz = testMock.Object;

        Assert.AreEqual(1, 1);

    }
}
Run Code Online (Sandbox Code Playgroud)

}

----更新--- 将Moq版本从4.10810.8更改为4.0.10501.6后一切正常!

lad*_*dge 6

以下测试通过我:

public interface ITest { string TestMethod(); }

public class Testing
{
    [Test]
    public void TestMethod()
    {
        var testMock = new Mock<ITest>();
        testMock.Setup(x => x.TestMethod()).Returns("String val");
        var xyz = testMock.Object;

        Assert.AreEqual(1, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您的界面是公共的并且在同一个程序集中,那么确实应该没有问题.我怀疑你在某个地方错过了一个accessibility关键字,因为非公共接口确实会引发运行时错误,因为代理程序集将无法基于它来实例化类型.

可能最好的做法是从我提供的代码开始,一次改变一件事,直到它与你的失败代码相匹配.如果你在每次更改之间运行测试,我认为你会找到遗漏的内容.

如果确实返回内部接口,请注意您的InternalsVisibleTo语句必须与内部接口位于同一程序集中,而不是测试程序集.另请注意,如果您的程序集具有强名称,则可能需要在InternalsVisibleTo语句中添加公钥指纹,如MSDN中所述.