C# 最小起订量';重写方法的安全可访问性必须与被重写方法的安全可访问性匹配';在dotnetfiddle中
我试图使用Moq在dotnetfiddle中编写一个简单的单元测试,但出于某种原因,运行时抱怨安全可访问性: 运行时异常(第20行):的类型初始值设定项 “Moq.ProxyFactory”引发了异常 堆栈跟踪: [System.TypeLoadException:继承时违反了安全规则 压倒一切的成员: 'Castle.DynamicProxy.ProxyGenerationOptions.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext.Security 重写方法的可访问性必须与安全性匹配 正在重写的方法的可访问性。] Moq.ProxyFactory..cctor()处的Moq.CastleProxyFactory..ctor() [System.TypeInitializationException:的类型初始值设定项 “Moq.ProxyFactory”在 Moq.ProxyFactory.get_Instance()位于 Moq.Guard.IsVisibleTroxyFactory(MethodInfo方法)位于 Moq.InvocationShape..ctor(LambdaExpression表达式,MethodInfo 方法,在Moq.ExpressionExtensions.g|u Split | 50(表达式e、表达式&r、调用形状&p、布尔赋值、布尔allowNonOverridableLastProperty)在Moq.ExpressionExtensions.Split(LambdaExpression表达式,Boolean allowNonOverridableLastProperty)在Moq.Mock.Setup(Mock Mock,LambdaExpression表达式,Condition Condition)在Moq.Mock1.Setup[TResult](表达式'1 expression)在 Unittests.Run():程序的第20行。Main():第10行 我搜索了一些其他的dotnetfiddle,它们的功能几乎相同(如),但没有抛出错误。这似乎是特定于dotnetfiddle的,因为在Visual Studio中这是有效的。我需要设置一些特定的.NET安全标志吗C# 最小起订量';重写方法的安全可访问性必须与被重写方法的安全可访问性匹配';在dotnetfiddle中,c#,moq,dotnetfiddle,C#,Moq,Dotnetfiddle,我试图使用Moq在dotnetfiddle中编写一个简单的单元测试,但出于某种原因,运行时抱怨安全可访问性: 运行时异常(第20行):的类型初始值设定项 “Moq.ProxyFactory”引发了异常 堆栈跟踪: [System.TypeLoadException:继承时违反了安全规则 压倒一切的成员: 'Castle.DynamicProxy.ProxyGenerationOptions.GetObjectData(System.Runtime.Serialization.Serializat
using System;
using Moq;
using AssertLibrary;
public class Program
{
public static void Main()
{
var unittest = new Unittests();
unittest.Run();
}
}
public class Unittests
{
public void Run()
{
// Arrange
var cacheMock = new Mock<ICache>();
cacheMock
.Setup(c => c.GetOrSet<MyModel>(It.IsAny<string>(), It.IsAny<Func<MyModel>>()))
.Returns((string key, Func<MyModel> captured) => { return captured(); });
var stuffs = new Stuffs(cacheMock.Object);
// Act
var result = stuffs.GetModel();
// Assert
Assert.Equals(5, result.MyProperty);
}
}
public class MyModel
{
public int MyProperty { get; set; }
}
public class Stuffs
{
private ICache _cache;
public Stuffs(ICache cache)
{
_cache = cache;
}
public MyModel GetModel()
{
var model = _cache.GetOrSet("cache-key", () =>
{
return new MyModel
{
MyProperty = 5
};
});
return model;
}
}
public interface ICache
{
T GetOrSet<T>(string key, Func<T> setter);
}
public class Cache : ICache
{
public T GetOrSet<T>(string key, Func<T> setter)
{
// do stuff
return setter();
}
}
使用系统;
使用最小起订量;
使用AssertLibrary;
公共课程
{
公共静态void Main()
{
var unittest=新的Unittests();
unittest.Run();
}
}
公共类单元测试
{
公开募捐
{
//安排
var cacheMock=new Mock();
cacheMock
.Setup(c=>c.GetOrSet(It.IsAny(),It.IsAny())
.Returns((字符串键,Func captured)=>{return captured();});
var stuffs=新填充(cacheMock.Object);
//表演
var result=stuffs.GetModel();
//断言
Assert.Equals(5,result.MyProperty);
}
}
公共类MyModel
{
公共int MyProperty{get;set;}
}
公共类物品
{
专用ICache\u缓存;
公共物品(ICache缓存)
{
_缓存=缓存;
}
公共MyModel GetModel()
{
var model=\u cache.GetOrSet(“缓存键”,()=>
{
返回新的MyModel
{
MyProperty=5
};
});
收益模型;
}
}
公共接口ICache
{
T GetOrSet(字符串键、函数设置器);
}
公共类缓存:ICache
{
公共T GetOrSet(字符串键、函数设置器)
{
//做事
返回设置器();
}
}
请参见对于这样的事情,我会远离dotnetfiddle。为什么不尝试使用像LinqPad这样的工具呢?这是一个很好的快速演示程序(尽管要使用Nuget软件包,您需要购买它)“远离dotnetfiddle做这样的事情”的原因是什么?有很多已知的问题吗?它会做一些奇怪的把戏吗?这些工具往往存在于沙盒中,以阻止用户访问系统和做奇怪的事情。我怀疑你在这里看到的错误与此有关。