如何实现检查对象状态变化的 NUnit 测试?

How to implement a NUnit test that checks for a state change in an object?

我正在努力将一些单元测试合并到一个旧的扑克游戏中,但我 运行 在尝试测试状态更改时遇到了一些麻烦。

相关 class 的 class 图看起来像 this。

这是更新集合中所有卡片状态的方法(在 class CardSet 中):

    /// <summary>
    /// Sets each of the card's Inplay properties to false. 
    /// </summary>
    public void ResetUsage()
    {
        for (int i = 0; i < deck.Length; i++)
           cardArray[i].Inplay = false;            
    }

我尝试实施的 NUnit 测试应该检查 Inplay 属性 是否确实设置为 false。

我的问题是是否可以编写此 NUnit 测试代码?

编辑:

这个问题最初是关于测试非静态方法的,但我意识到(正如 Lasse 所指出的那样)我实际上是在尝试确认状态的变化。因此,我修改了这个问题以帮助未来的读者。

我了解到可以测试任何效果,并且您可以注入依赖项来执行此操作。我的自我回答在某种程度上证明了这一点。

是的,有可能。

如果您可以在 junit 测试中实例化 CardSet class,您可以测试 ResetUsage() 是否符合您的预期。如果你能观察到 RunPokerSession 对 CardSet 的作用将取决于 RunPokerSession 的设计和结构,而你的问题并不清楚。您很可能希望将 CarSet 注入 RunPokerSession,然后观察结果。你能用当前的实现做到这一点吗?

在 Lasse 和 Jocke 的帮助下,我能够仔细考虑实施。这就是我测试更改的方式。

    [Test]
    public void ResetUsage_ValidateInPlayReset_ReturnsTrue()
    {
        CardSet testDeck = new CardSet();

        testDeck.ResetUsage();

        bool result = true;

        for (int i = 0; i < testDeck.cardArray.Length; i++)
        {
            if (testDeck.cardArray[i].Inplay)
            {
                result = false; 
                break;
            }               
        }

        Assert.That(result);
    }