MOQ 4.0:'Moq.Mock`1'的类型初始值设定项引发了异常

时间:2010-10-01 21:01:42

标签: nunit mocking moq

我得到了例外

  

'Moq.Mock`1'的类型初始值设定项   抛出异常。

使用Moq 4.0我已经在几个论坛上查看过,他们暗示使用Moq-NoCastle版本。我在Moq文件夹中尝试了这个和版本。两者都有相同的结果。

我有一个包含2个项目的解决方案,一个用于我的界面,一个用于我的测试。我的主项目有2个文件:

IMyInterface.cs:

using System;

namespace Prototype
{
    public interface IMyInterface
    {
        int Value { get; set; }
        void ProcessValue();
        int GetValue();
    }
}

我的program.cs文件只包含项目生成的默认代码。

我的测试项目有一个用于我的虚拟测试的文件 - TestProgram.cs

using System;
using NUnit.Framework;
using Moq;

namespace Prototype.UnitTests
{
    [TestFixture]
    public class TestProgram
    {
        Mock<IMyInterface> mock;

        [TestFixtureSetUp]
        void TestSetup()
        {
            mock = new Mock<IMyInterface>();
            mock.Setup(x => x.GetValue()).Returns(2);
        }

        [Test]
        public void RunTest()
        {
            IMyInterface obj = mock.Object; /* This line fails */
            int val = obj.GetValue();
            Assert.True(val == 2);
        }
    }
}

根据文档,一切都很好,并且编译得很好。当我尝试运行测试时出现问题。它到达上面标记的行并崩溃,但有例外:

  

'Moq.Mock`1'的类型初始值设定项   抛出异常。

我看不出这里出了什么问题,有人可以对此有所了解吗?

4 个答案:

答案 0 :(得分:8)

当我将Castle.Core NuGet包更新到4.0.0版本时,我发生了这种情况。在此刻,最新的Moq(v4.5.30)无法正常改变。

我通过回到Castle.Core版本3.3.3 解决了这个问题。

答案 1 :(得分:4)

我做了以下更改后成功运行了测试:

  1. 制作TestSetup()公开
  2. RunTest中,将int val = obj.Value更改为int val = obj.GetValue() - 这只是为了让Assert通过。
  3. 我不熟悉NUnit(我使用xUnit),但我的猜测是TestSetup()是私有的问题。当该方法是私有的时,NUnit会为我显示此异常:

    Prototype.UnitTests.TestProgram.RunTest:
    Invalid signature for SetUp or TearDown method: TestSetup
    

    也许您正在使用以不同方式处理这种情况的旧版NUnit(我刚刚下载了2.5.7.10213)。

    HTH

答案 2 :(得分:3)

我对Moq也有类似的例外(以前效果很好)。

对我来说,解决方案是使用NuGet卸载Moq和异常提到的程序集。然后使用NuGet重新安装Moq,并应用随后出现的所有NuGet更新。

答案 3 :(得分:0)

我也使用Moq遇到了这个问题,但与Richard稍有不同。

我的错误如下。

  

消息:System.TypeInitializationException:'Moq.Mock`1'的类型初始值设定项引发了异常。   ---- System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.AspNetCore.Razor.Runtime,Version = 2.1.1.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'。

就我而言,我不必删除Mock,请以正确的版本安装缺少的Assembly。我不知道为什么这只是现在的问题。合并分支后发生了问题,但是两个分支既没有程序集,也没有显示此错误。但是,一切都好。