如何模拟其他方法内部的方法调用返回

开尔文沙

我想知道是否有可能模拟在目标测试方法中实例化的类的方法的返回。此处的不同点是,要实例化此对象,必须在其构造函数中传递从静态类返回的对象。按照示例进行更清晰的说明。

public async Task Invoke(HttpContext httpContext)
{
    GrpcChannel channel = GrpcChannel.ForAddress("address");
    var client = new MethodDescriptorCaller(channel);
    client.CallGrpcAsync(); //I need to mock the return of this method
}

到目前为止,我的想法是将该过程封装在另一个类中。并使用依赖注入来模拟该返回。但是,我认为这是一个非常糟糕的解决方案。

chi

我不认为要建立工厂并注入它,这对所有IMO都是一个不好的解决方案

我认为应该是这样的...

interface IMethodDescriptorCallerFactory
{
  MethodDescriptorCaller Build(GrpcChannel channel);
}

class MethodDescriptorCallerFactory : IMethodDescriptorCallerFactory
{
  MethodDescriptorCaller Build(GrpcChannel channel)
  {
    return new MethodDescriptorCaller(channel);
  }
}

class Foo
{
  IMethodDescriptorCallerFactory _methodDescriptorCallerFactory;

  public Foo(IMethodDescriptorCallerFactory methodDescriptorCallerFactory)
  {
    _methodDescriptorCallerFactory = methodDescriptorCallerFactory
  }

  public async Task Invoke(HttpContext httpContext)
  {
      GrpcChannel channel = GrpcChannel.ForAddress("address");
      var client = _methodDescriptorCallerFactory.Build(channel);
      client.CallGrpcAsync(); //I need to mock the return of this method
  }
}


class FooTest
{
  [Fact]
  public async Task Test_Invoke()
  {
    var methodDescriptorCaller = Mock.Of<MethodDescriptorCaller>(m =>
        m.CallGrpcAsync() == Task.Completed
    );

    var methodDescriptorCallerFactory = Mock.Of<IMethodDescriptorCallerFactory>(m =>
        m.Build(It.IsAny<GrpcChannel>()) == methodDescriptorCaller
    );

    var foo = new Foo(methodDescriptorCallerFactory);

    var httpContext = Mock.Of<HttpContext>();

    await foo.Invoke(httpContext);

    Mock.Get(methodDescriptorCallerFactory).VerifyAll();
    Mock.Get(methodDescriptorCaller).VerifyAll();
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何模拟调用其他方法而没有返回值的方法

来自分类Dev

Groovy,如何模拟保留其他方法的接口

来自分类Dev

如何从其他方法调用事件方法?

来自分类Dev

从调用其他方法的方法

来自分类Dev

使用Autofac.Moq检查其他方法时,如何正确模拟方法以返回特定数据?

来自分类Dev

用其他方法调用函数

来自分类Dev

改为调用其他方法

来自分类Dev

Python 类调用其他方法

来自分类Dev

C#模拟设置返回取决于其他方法执行的顺序

来自分类Dev

检查方法是直接调用还是其他方法调用

来自分类Dev

当调用该类的任何其他方法时,如何调用该类的方法(Ruby)

来自分类Dev

如何从其他方法访问变量

来自分类Dev

如何使用其他方法的输入?

来自分类Dev

您如何使方法内部产生的变量可用于类中的所有其他方法?

来自分类Dev

如何使用 Autokey 或其他方法模拟 Alt F4

来自分类Dev

调用其他方法时,返回语句不起作用

来自分类Dev

当通过其他方法调用时,createImage在Android中返回不可变位图吗?

来自分类Dev

PHPUnit:测试调用其他方法的方法

来自分类Dev

在其他方法中调用参数化方法

来自分类Dev

在其他方法中调用带参数的方法

来自分类Dev

如何知道哪个方法正在调用javascript中的其他方法

来自分类Dev

当测试调用其他方法的方法时,如何避免多次编写相同的测试

来自分类Dev

如何使用PHPUnit测试一个调用同一类的其他方法但不返回值的方法

来自分类Dev

Java在同步块中调用其他方法

来自分类Dev

需要在函数顶部调用其他方法

来自分类Dev

在检查其他方法问题之前应调用shouldPerformSegueWithIdentifier

来自分类Dev

在ActiveRecord对象上调用其他方法

来自分类Dev

其他方法的范围

来自分类Dev

根据其他方法输入返回值

Related 相关文章

  1. 1

    如何模拟调用其他方法而没有返回值的方法

  2. 2

    Groovy,如何模拟保留其他方法的接口

  3. 3

    如何从其他方法调用事件方法?

  4. 4

    从调用其他方法的方法

  5. 5

    使用Autofac.Moq检查其他方法时,如何正确模拟方法以返回特定数据?

  6. 6

    用其他方法调用函数

  7. 7

    改为调用其他方法

  8. 8

    Python 类调用其他方法

  9. 9

    C#模拟设置返回取决于其他方法执行的顺序

  10. 10

    检查方法是直接调用还是其他方法调用

  11. 11

    当调用该类的任何其他方法时,如何调用该类的方法(Ruby)

  12. 12

    如何从其他方法访问变量

  13. 13

    如何使用其他方法的输入?

  14. 14

    您如何使方法内部产生的变量可用于类中的所有其他方法?

  15. 15

    如何使用 Autokey 或其他方法模拟 Alt F4

  16. 16

    调用其他方法时,返回语句不起作用

  17. 17

    当通过其他方法调用时,createImage在Android中返回不可变位图吗?

  18. 18

    PHPUnit:测试调用其他方法的方法

  19. 19

    在其他方法中调用参数化方法

  20. 20

    在其他方法中调用带参数的方法

  21. 21

    如何知道哪个方法正在调用javascript中的其他方法

  22. 22

    当测试调用其他方法的方法时,如何避免多次编写相同的测试

  23. 23

    如何使用PHPUnit测试一个调用同一类的其他方法但不返回值的方法

  24. 24

    Java在同步块中调用其他方法

  25. 25

    需要在函数顶部调用其他方法

  26. 26

    在检查其他方法问题之前应调用shouldPerformSegueWithIdentifier

  27. 27

    在ActiveRecord对象上调用其他方法

  28. 28

    其他方法的范围

  29. 29

    根据其他方法输入返回值

热门标签

归档