【问题标题】:xUnit shared context by private static fieldsxUnit 通过私有静态字段共享上下文
【发布时间】:2022-05-19 09:13:33
【问题描述】:

通过创建private static 字段的sharing context 方法有什么缺点?如果我不需要打电话给Dispose?

public class MyTests3 : IDisposable
{
    private static Mock<ILogger> _loggerMock = new Mock<ILogger>();

    public void Dispose()
    {
        _loggerMock.Invocations.Clear();
    }

    [Fact]
    public void Debug_OnInit_CalledOnce()
    {
        // arrange & act
        _loggerMock.Object.Debug("first");
        
        // assert
        _loggerMock.Verify(l => l.Debug(It.IsAny<string>()), Times.Once);
    }
    
    [Fact]
    public void Debug_OnExecute_CalledOnce()
    {
        // arrange & act
        _loggerMock.Object.Debug("second");
        
        // assert
        _loggerMock.Verify(l => l.Debug(It.IsAny<string>()), Times.Once);
    }
}

另一个问题 - 我应该在测试完成后调用 Reset 获取模拟对象吗?

【问题讨论】:

  • 您的“共享上下文”链接无效。

标签: c# unit-testing moq xunit dispose


【解决方案1】:

您应该避免在测试之间共享状态。它可能会产生不需要的和不可预测的行为,尤其是当您的测试并行运行时。

这是prefer-helper-methods-to-setup-and-teardown 最佳实践的原因之一。

【讨论】:

  • 这只是一个建议。以及我们应该保留我们的测试fast。因此,如果我有多个测试用例,如果我确定它们的不变性,我不想再次创建对象并分配内存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
相关资源
最近更新 更多