我在域模型中有一个实体。此实体具有ChangeStatus(StatusesEnum newStatus)方法。
StatusesEnum有超过10个成员。它们只能按正确顺序更改,例如StatusesEnum.First可以更改为Second和Third,Third可以更改为Fourth,Fourth可以更改为Fifth和Seventh等。
ChangeStatus方法为错误的转换抛出异常。 我不认为测试所有情况都是对的(也许我错了:)),但是如何编写测试以检查正确的转换顺序。
答案 0 :(得分:2)
> how can I write test for checking right transitions order.
如果您使用的是NUnit 2.5或更高版本,则可以使用 Parameterized Tests
[Test, Sequential]
public void MyTest(
[Values(State1,State2,State99)] StatusesEnum initialState,
[Values(State2,State3,State1)] StatusesEnum nextState,
[Values(true, true, false)] bool expectedOutcome
)
{
Entity entity = new Entity(initialState);
if (expectedOutcome)
entity.ChangeStatus(nextState); // this should be ok
else {
try {
entity.ChangeStatus(nextState);
// this should throw
Assert.Fail("Missing expected Exception");
} catch (IllegaleStateTransitionException ex) {
// every thing is ok
}
}
...
}
但如果我是你,我会创建一个非投掷决策函数
IsValidTransition(StatusesEnum oldState, StatusesEnum newState)
将在你的statelogic中使用,并在unittest中进行测试,因此不再需要 测试异常逻辑
答案 1 :(得分:1)
你想要多么彻底取决于你。我会对每个正确的转换进行测试,例如
[Test]
public void ChangeStatus_FirstToSecond_Succeeds()
{
Entity entity = new Entity(StatusEnum.First);
entity.ChangeStatus(StatusEnum.Second);
Assert.That(entity.Status, Is.EqualTo(StatusEnum.Second);
}
每个输入状态测试一次无效转换:
[Test]
[ExpectedException(typeof(StatusChangeException))]
public void ChangeStatus_FirstToTenth_ThrowsException()
{
Entity entity = new Entity(StatusEnum.First);
entity.ChangeStatus(StatusEnum.Tenth);
}