我得到了例外
'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'的类型初始值设定项引发了异常。
我看不出这里出了什么问题,有人能说清楚吗?
在进行以下更改后,我能够成功运行您的测试:
TestSetup()
公开RunTest
,将int val = obj.Value
改为int val = obj.GetValue()
- 这只是为了让Assert
通过。我不熟悉NUnit(我使用xUnit),但我的猜测是TestSetup()是私有的问题。当该方法是私有的时,NUnit会为我显示此异常:
Prototype.UnitTests.TestProgram.RunTest:
Invalid signature for SetUp or TearDown method: TestSetup
也许您正在使用旧版本的NUnit以不同方式处理这种情况(我刚刚下载了2.5.7.10213)。
HTH
当我将Castle.Core NuGet包更新到版本4.0.0时,我发生了这种情况。在这一刻,最新的Moq(v4.5.30)改变了一些不能正常工作的东西。
我通过回到Castle.Core版本3.3.3解决了这个问题。
我和Moq有一个类似的例外(它以前工作正常)。
对我来说,解决方案是使用NuGet卸载Moq和异常提到的程序集。然后使用NuGet重新安装Moq并应用随后出现的任何NuGet更新。
我也使用Moq这个问题,但与理查德略有不同。
我的错误如下。
消息:System.TypeInitializationException:'Moq.Mock`1'的类型初始值设定项引发异常。 ---- System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.AspNetCore.Razor.Runtime,Version = 2.1.1.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'。
在我的情况下,我没有删除模拟,在正确的版本中安装缺少的程序集。我不知道为什么这只是一个问题。合并分支后发生问题,但两个分支之前没有任何程序集也没有显示此错误。然而,结束好一切都好。