首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JustMock:模拟私有方法

JustMock:模拟私有方法
EN

Stack Overflow用户
提问于 2016-11-02 21:05:08
回答 2查看 1.2K关注 0票数 1

我是JustMock模拟框架的新手,我正在尝试模拟一个私有方法。我完全知道对私有方法进行单元测试通常是一种糟糕的做法,但在这种情况下,我别无选择。我一直在看官方文档(http://www.telerik.com/help/justmock/advanced-usage-mocking-non-public-members-and-types.html),但似乎什么都不起作用。

下面是我的示例代码:

代码语言:javascript
复制
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();
    }
}

下面是错误日志:

代码语言:javascript
复制
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

我只是搞不懂为什么它不能工作。

EN

回答 2

Stack Overflow用户

发布于 2016-11-02 21:13:53

在我看来,有时测试有助于让我们知道如何改进我们的代码,或者它应该如何构造,就像Kritner说的那样,也许函数应该是公共的,而不是私有的。

另一方面,如果你想保持它是私有的,而不是测试对私有方法的调用,你可以在你的公共方法(私有方法被调用的地方)中测试私有方法中的代码是否在公共方法中被正确调用,就像私有方法不存在并且代码直接写在公共方法中一样。

编辑:您甚至可以创建一个调用私有方法的简单函数(如果可能,还可以添加一些与调用相关的逻辑)并测试此函数。

票数 0
EN

Stack Overflow用户

发布于 2017-01-21 07:11:50

我已经尝试过在一个干净的.NET 4.5控制台项目中运行你的代码,它可以像预期的那样工作-- a()确实打印出了模拟值。从JustMock获得的FileIOPermission是一个非常不寻常的例外,可能是迄今为止的第一个例外。对于控制台应用程序来说,权限错误通常更为罕见,因为它们通常是在完全信任的情况下运行的。

如果您将System.TypeInitializationExceptionInnerException及其调用堆栈粘贴到票证中,这将非常有帮助。只需从调试器复制它即可。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40380702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档