c# - 我如何使用 Moq 来模拟一个接口(interface),该接口(interface)具有将具体类作为参数的方法?

标签 c# unit-testing testing moq

  1. 我有这个场景:一个有 2 个方法的接口(interface)
  2. 这两种方法接受请求并返回响应
  3. 方法包含内部功能(检查权限和验证请求并使用 Entity Framework 从数据库获取数据。
  4. 但我想测试方法而不仅仅是接口(interface)。
  5. 我已经成功地测试了接口(interface),但现在我想进入方法并在其中进行测试。

代码示例:

 public interface IMyInterface
    {
      [OperationContract]
      responseObject GetData(Service<RequestObject> request);
    }

    public class MyConcreteClass : IMyInterface
    {
       public responseObject GetData(Service<RequestObject> request)
       {
          CheckForNull(request);
          ValidateMethod(request);
          //connect to db
          using(var context = new contextEntity)
          {
            //get data
          }
       }
    }

现在,我想测试检查空值、权限和数据访问,是否可行?还是必须从内部方法中提取接口(interface)?

PS,这是为了我的单元测试。我正在尝试消除外部依赖性。 请详细说明

最佳答案

不应该直接需要单元测试私有(private)方法,只能通过公共(public)方法间接使用。如果您认为测试公共(public)方法不够精确,可能是因为该方法和类已经太复杂了。

在这种情况下,请考虑在新代码所在的位置创建一个或多个新类。这样你就可以通过公共(public)方法对你的代码进行单元测试。额外的好处是您的代码在 Single responsibility principle. 方面可能更好。

关于c# - 我如何使用 Moq 来模拟一个接口(interface),该接口(interface)具有将具体类作为参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38982105/

相关文章:

c# - MessageBox 的问题

c# - LINQ to Object 比较两个整数列表的不同值

django - 通过设置的默认语言在测试期间不受尊重

unit-testing - MockK "io.mockk.MockKException: no answer found for:"错误

java - 测试套件构造失败 -(android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests)。如何解决?

ruby-on-rails - Ruby on Rails 中的验证测试总是错误的

c# - 为什么使用 'ICollection<T>' ?

c# - 如何在 C# 中将 "Keys"枚举值转换为 "int"字符?

c# - 如何在不失去单元测试能力的情况下将日志记录添加到静态类?

php - PHPUnit 测试需要在 "/test"目录中吗?