2011-02-04 39 views
0

我在域模型中有一個實體。該實體具有ChangeStatus(StatusesEnum newStatus)方法。 StatusesEnum擁有超過10個成員。他們只能以正確的順序被改變,例如StatusesEnum.First可以更改爲第二和第三,第三是可以改變的,以四隻,四是可以改變的,以第五和第七等
測試狀態更改規則

ChangeStatus方法拋出異常因爲錯誤的過渡。 我不認爲測試所有的情況是正確的(也許我錯了:)),但是我怎麼寫測試來檢查正確的轉換順序。

回答

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和單元測試進行測試,所以沒有更需要 測試異常邏輯

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); 
} 
+0

是的,也許就足以只有一個測試trows一個例外只需檢查該異常是否正在拋出,在這種情況下可能會出現錯誤的轉換。 – Danil 2011-02-04 11:13:43