繁体   English   中英

如何为在其主体中调用另一个方法的方法编写 xUnit Test?

[英]How to write xUnit Test for a method which calls another method in its body?

这是 class 包含我想为它编写测试的EnqueueJobAsync方法:

public class ConsumerBaseForTesting
{
    protected IJobStore JobStore { get; private set; }

    public ConsumerBaseForTesting(IJobStore jobStore)
    {
        JobStore = jobStore;
    }

    public async Task<IJob> EnqueueJobAsync(IJob job)
        => await JobStore.CreateAsync(job);
}

这是我的测试失败,它的实际返回总是NULL

public class ConsumerBaseTest
{


    private readonly Mock<IJobStore> _moqIJobStore;
    private readonly ConsumerBaseForTesting _consumerBase;

    public ConsumerBaseTest()
    {
        _moqIJobStore = new Mock<IJobStore>();
        _consumerBase = new ConsumerBaseForTesting(_moqIJobStore.Object);
    }


    [Theory]
    [ClassData(typeof(JobClassForTesting))]
    public async Task EnqueueJobAsyncTest(IJob job)
    {
        var jobResult = await _consumerBase.EnqueueJobAsync(job);

        Assert.Equal(job, jobResult);
    }
    
}

为了复制预期的行为,需要设置模拟来做两件事。

它需要在完成的任务中返回传递的作业。

//...

public ConsumerBaseTest() {
    _moqIJobStore = new Mock<IJobStore>();
    _consumerBase = new ConsumerBaseForTesting(_moqIJobStore.Object);

    //setup the mock to capture and return the job when CreateAsync(IJob job) is invoked
    _moqIJobStore
        .Setup(_ => _.CreateAsync(It.IsAny<IJob>()))
        .Returns((IJob x) => Task.FromResult(x));     }

//...

.Returns((IJob x) => Task.FromResult(x))捕获参数并返回完成的Task<IJob>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM