我是JustMock模拟框架的新手,我正在尝试模拟一个私有方法。我完全知道对私有方法进行单元测试通常是一种糟糕的做法,但在这种情况下,我别无选择。我一直在看官方文档(http://www.telerik.com/help/justmock/advanced-usage-mocking-non-public-members-and-types.html),但似乎什么都不起作用。
下面是我的示例代码:
using System;
using Telerik.JustMock;
public class Program
{
public class Foo
{
public void useA()
{
a();
}
private void a()
{
Console.WriteLine("AAAAAAAAAAAAAAA");
}
}
public static void Main()
{
var mockeClass = Mock.Create<Foo>(Behavior.CallOriginal);
Mock.NonPublic.Arrange(mockeClass, "a").DoInstead(() => Console.WriteLine("Mock success!!!"));
mockeClass.useA();
}
}下面是错误日志:
Run-time exception (line 21): The type initializer for 'Telerik.JustMock.Core.Context.MockingContext' threw an exception.
Stack Trace:
[System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
[System.TypeInitializationException: The type initializer for 'Telerik.JustMock.Core.Context.MockingContext' threw an exception.]
at Program.Main(): line 21我只是搞不懂为什么它不能工作。
发布于 2016-11-02 21:13:53
在我看来,有时测试有助于让我们知道如何改进我们的代码,或者它应该如何构造,就像Kritner说的那样,也许函数应该是公共的,而不是私有的。
另一方面,如果你想保持它是私有的,而不是测试对私有方法的调用,你可以在你的公共方法(私有方法被调用的地方)中测试私有方法中的代码是否在公共方法中被正确调用,就像私有方法不存在并且代码直接写在公共方法中一样。
编辑:您甚至可以创建一个调用私有方法的简单函数(如果可能,还可以添加一些与调用相关的逻辑)并测试此函数。
发布于 2017-01-21 07:11:50
我已经尝试过在一个干净的.NET 4.5控制台项目中运行你的代码,它可以像预期的那样工作-- a()确实打印出了模拟值。从JustMock获得的FileIOPermission是一个非常不寻常的例外,可能是迄今为止的第一个例外。对于控制台应用程序来说,权限错误通常更为罕见,因为它们通常是在完全信任的情况下运行的。
如果您将System.TypeInitializationException的InnerException及其调用堆栈粘贴到票证中,这将非常有帮助。只需从调试器复制它即可。
https://stackoverflow.com/questions/40380702
复制相似问题