如何实现检查对象状态变化的 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);
}
我正在努力将一些单元测试合并到一个旧的扑克游戏中,但我 运行 在尝试测试状态更改时遇到了一些麻烦。
相关 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);
}