当前位置: 首页 > 知识库问答 >
问题:

在异步方法[duplicate]上使用Verifyable的UnitTest中出现NullReferenceException

白成济
2023-03-14

我只是在使用xUnitMoq设置单元测试时遇到了问题。

方法测试方法()包含逻辑,我想测试。它是异步的,虽然返回一个任务

public class Testee
{
    private readonly IDoSomething _doSomething;

    public Testee(IDoSomething doSomething)
    {
        _doSomething = doSomething;
    }

    public async Task TestMethod()
    {
        await _doSomething.DoAsync(true); // throws NullReferenceException in Unit-Test
    }
}

接口IDo某物看起来像这样

public interface IDoSomething
{
    Task DoAsync(bool aboolean);
}

现在我像这样设置我的单元测试。

public class TesteeTest
{
    [Fact]
    public async Task MyTest()
    {
        var mock = new Mock<IDoSomething>();
        mock.Setup(x => x.DoAsync(It.IsAny<bool>())).Verifiable();

        var testee = new Testee(mock.Object);

        await testee.TestMethod(); // Test breaks here because it throws an exception

        mock.Verify(x => x.DoAsync(true), Times.Once);
        mock.Verify(x => x.DoAsync(false), Times.Never);
    }
}

为什么我会得到这个例外?

共有1个答案

聂溪叠
2023-03-14

mock。Setup()缺少返回值并返回null。因此在TestMethod()中,由\u doSomething返回的任务。DoAsync(true)nullnull被等待,这当然会导致系统。NullReferneceException

为了解决这个问题,我建议添加。返回任务。完成任务)到模拟设置。

mock.Setup(x => x.DoAsync(It.IsAny<bool>())).Returns(Task.CompletedTask).Verifiable();

当使用waiter模式编译wait时,现在有一个任务要调用。GetAwaiter(),返回一个TaskAwaiter。这里更好地解释了这些原则:

  • 迪信的博客
  • Marko Papic's Blog
 类似资料:
  • 没有await并且在非异步方法中调用异步方法的行为是什么?我这样问是因为我看到Visual Studio在调用异步方法时没有显示任何警告,好像这是一件非常正常的事情。在这种情况下,异步方法的行为是否像是同步的?

  • 我试图在反应本机中捕捉状态栏的高度。 为此我写了以下代码 在这里,显示为,我打算将其存储在中,但之后的第二个console.log给了我未定义的值 这让我想到是函数。那么,有人能帮我计算一下高度吗?我们如何使用async wait来呈现react native

  • 我正在处理来自TCP套接字的大量事件(每秒10个套接字),因此我使用多线程来处理这些事件。 大多数情况下,这是正确的,但有时会出现这些事件的雪崩,有时我会得到一个ConcurrentModificationException: 12-10 14:08:42.071:E/AndreidRuntime(28135):致命例外:线程-369 12-10 14:08:42.071:E/AndreidRun

  • null my Library的核心逻辑 客户将使用我们的库,他们将通过传递builder对象来调用它。然后,我们将通过使用对象构造一个URL,并通过执行该对象对该URL进行HTTP客户端调用,在将响应作为JSON字符串返回后,我们将通过创建对象将该JSON字符串按原样发送给客户。有些客户会调用,有些可能会调用方法,所以我需要在库中分别提供两个方法。 接口: 您将如何实现同步和异步方法给定上述标准

  • 本文向大家介绍C#实现异步GET的方法,包括了C#实现异步GET的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现异步GET的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。