我在域模型中有一個實體。該實體具有ChangeStatus(StatusesEnum newStatus)方法。 StatusesEnum擁有超過10個成員。他們只能以正確的順序被改變,例如StatusesEnum.First可以更改爲第二和第三,第三是可以改變的,以四隻,四是可以改變的,以第五和第七等
測試狀態更改規則
ChangeStatus方法拋出異常因爲錯誤的過渡。 我不認爲測試所有的情況是正確的(也許我錯了:)),但是我怎麼寫測試來檢查正確的轉換順序。
我在域模型中有一個實體。該實體具有ChangeStatus(StatusesEnum newStatus)方法。 StatusesEnum擁有超過10個成員。他們只能以正確的順序被改變,例如StatusesEnum.First可以更改爲第二和第三,第三是可以改變的,以四隻,四是可以改變的,以第五和第七等
測試狀態更改規則
ChangeStatus方法拋出異常因爲錯誤的過渡。 我不認爲測試所有的情況是正確的(也許我錯了:)),但是我怎麼寫測試來檢查正確的轉換順序。
> 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和單元測試進行測試,所以沒有更需要 測試異常邏輯
你想成爲的徹底取決於你。我會爲每個正確的轉換進行測試,例如
[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);
}
是的,也許就足以只有一個測試trows一個例外只需檢查該異常是否正在拋出,在這種情況下可能會出現錯誤的轉換。 – Danil 2011-02-04 11:13:43