【问题标题】:Mocking in C# Net Core 2.1 Function App with xUnit framework使用 xUnit 框架在 C# Net Core 2.1 Function App 中进行模拟
【发布时间】:2020-02-15 00:34:07
【问题描述】:

我正在尝试使用 xUnit 框架在 C# .Net Core 2.1 Function App 中编写单元测试,其中类变量通过 Autofac 依赖注入进行初始化。

public class TestClass
{
    private readonly ISampleLogger<SampleReporting> sampleLogger;
    private readonly IRequestSender requestSender;

    public SampleReporting(IDependencyResolver dependencyResolver)
    {
        dependencyResolver?.Resolve<ISampleLoggingStartup>().Configure();
        this.sampleLogger = dependencyResolver.Resolve<ISampleLogger<SampleReporting>>();
        this.requestSender = dependencyResolver.Resolve<IRequestSender>();
    }
...

public void FunctionToTest(string s)
{
    ...

我正在尝试模拟 dependencyresolver 对象,但无法弄清楚如何模拟变量 sampleLogger 和 requestSender,因为它们是在构造函数内部设置的。任何线索将不胜感激。

我试图像这样模拟 IDependencyResolver,但无法让它工作:

private readonly Mock<IDependencyResolver> dependencyResolverMock;

[Fact]
public void Test1()
{
    dependencyResolverMock.Setup(x => x.Resolve<It.IsAny<ISampleLoggingStartup>>().Configure());

【问题讨论】:

  • 当前状态下的问题不完整,因此不清楚。
  • 你是如何创建 IDependencyResolver 的模拟的?
  • @ChetanRanpariya 请检查更新后的问题。
  • @Nkosi 添加了一些详细信息,如果您需要更多详细信息,请告诉我。简而言之,我只是希望能够为上面的代码编写单元测试。
  • 您只需要模拟Resolve 方法并返回适当的模拟实例...Setup(d =&gt; d.Resolve&lt;ISampleLoggingStartup&gt;()).Returns(Mock.Of&lt;ISampleLoggingStartup&gt;) 等等...

标签: c# unit-testing mocking moq xunit


【解决方案1】:

在测试构造函数中使用它对我来说很好:

public ReportingTest()
{
    dependencyResolverMock = new Mock<IDependencyResolver>();

    dependencyResolverMock.Setup(x => x.Resolve<ISampleLogger<SampleReporting>>()).Returns(Mock.Of<ISampleLogger<SampleReporting>>());
    dependencyResolverMock.Setup(x => x.Resolve<IRequestSender()).Returns(Mock.Of<IRequestSender>());
}

【讨论】:

    猜你喜欢
    • 2020-01-07
    • 2020-12-27
    • 2019-12-29
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多