无效方法的替代测试

NSubstitute test for void method

我想验证参数 idStatus 是否已分配给 myObj 实例。 我如何使用 NSubstitute 做到这一点?我认为如果我能以某种方式验证 UpdateObject 的参数,这将是对该方法的一个很好的测试,但不确定如何执行此操作。有什么想法吗?

public void SetObjectStatus(int id, int? idStatus)
{
    var myObj = GetObject(id);
    myObj.IdStatus = idStatus;

    UpdateObject(myObj);
}


[TestMethod]
public void SetObjectStatus_Verify()
{
    //Arrange
    int id = 1;
    int? newStatus = 10;

    //Act
    test.SetObjectStatus(id, newStatus);

    //Assert
    //?? I would like to check that myObj.IdStatus equals newStatus (10).
}

这取决于您是要测试内部结构(白盒测试)还是只测试结果(黑盒测试)。

首先:您的代码是否为您提供了 GetObject(id) 可以设置的灵活性,以便它实际上 returns 是一个模拟?如果是这样,您可以使用 var mock = Substitute.For<IYourObject>() 设置模拟并调用 mock.Received().IdStatus (see here).

第二种:您需要在测试方法中调用 GetObject(id) 并查看是否存在预期值。