2014-01-05 33 views
0

我在我的代碼中使用的測試,並通過我的理解,所有的測試要求的方法運行是這樣的:爲什麼我的Assert失敗? (拋出異常)

private ClassName(Argument) 
{ 
    return; 
} 

那麼究竟是什麼測試實際上是檢查是否「參數「是方法/測試結束時的正確輸出。

但在我的情況下,傳入的參數與輸出無關。因此我不確定如何測試它。

注意:代碼本身是健全的,它會輸出正確的變量。此外,我實際上寫了代碼後測試(大booboo,我知道,我想養成總是測試的習慣。)

編輯:我相信問題是關於測試正在退出通過LoginView.CloseLoginView.Menu.SetMenuView。 (該功能在此行結束,測試無法完成?)

return;的位置也會影響其餘代碼,因此它需要位於代碼末尾。如果我移動它,其餘的代碼變得無法訪問,並且程序中斷。

我一直在尋找方法來繞過異常,而我所想到的就是測試異常實際上是否被正確拋出。 有沒有辦法繞過測試中的異常?

下面是測試:

public void Compare_LoginTest() 
{ 
    User_LoginView LoginView = new User_LoginView(); 
    User_Controller.screenName = "ben"; 
    User_Controller.screenPwd = "password"; 
    User_Controller.Compare_Login(LoginView); 
    int actual = User_Controller.screenAccess; 
    int expected = 1; 
    Assert.AreEqual(expected, actual); 
} 

這裏正在測試方法:

public static void Compare_Login(User_LoginView LoginView) 
    { 
     // Creates a new oject of User_Model and populates it from the User_Controller. 
     User_Model AccessModel = new User_Model(); 
     AccessModel.Name = screenName; 
     AccessModel.Pwd = screenPwd; 

     // Runs the Login Comparsion in the Database_Facade, and passes in the Model. 
     Database_Facade Database = new Database_Facade(); 
     Database.GetLoginAccess(AccessModel); 
     screenAccess = AccessModel.AccessLevel; 
     Menu_View.accessLevelSet = AccessModel.AccessLevel; 

     // Compares the returned AccessLevel. 
     // if it is corect; closes the Login and runs the SetMenuView method, 
     // if it is incorrect; shows an error. 
     if (AccessModel.AccessLevel > 0) 
     { 
      Console.WriteLine("Access Level " + AccessModel.AccessLevel); 
      // Exception Thrown in testing. 
      LoginView.Close(); 
      LoginView.Menu.SetMenuView(); 
     } 
     else 
     { 
      ErrorCodes_Controller LoginError = new ErrorCodes_Controller(); 
      LoginError.WrongLoginError(); 
     } 
     return; 
    } 
+4

你應該把它分解成更小的函數來完成離散任務,驗證密碼)&測試那些。 – SLaks

+1

有沒有聽說過正則表達式? – Matthias

+0

那到底發生了什麼?你期望人們在瀏覽器中調試你的代碼嗎?我看到stackoverflow正在變成'makemyhomeworkforme.com'。 –

回答

0

我不明白你在問什麼......測試將通過若靜態UserController.screenAccess變量是1 - 它看起來像Compare_Login方法始終將其設置爲1.

這一切都看起來不錯,所以如果您的測試失敗,那麼有些東西會阻止代碼達到這一點。

對於大多數單元測試框架(我猜你只是使用內置的微軟的?),例外是單元測試方法如何通過或失敗 - 如果斷言不正確,Assert.Xyz方法會引發異常,否則他們不會。您的代碼可能拋出的任何其他異常也都視爲失敗。 測試框架捕獲任何異常並將測試標記爲已通過測試

我猜想Check_Login函數或Compare_Login函數中的某個東西正在拋出異常。這是我能看到的唯一會導致單元測試失敗的事情。然而,我很驚訝你沒有注意到這樣的例外(嘗試點擊失敗的單元測試,看看你可以看到有關失敗的細節)

+0

'screenAccess'變量是一個虛假的變量,測試是在做,我也查看了代碼,發現'LoginView.Close()'和'LoginView.Menu.SetMenuView()'都是拋出異常(我不知道我明白爲什麼?),但如果移動'return;'向上,其餘的代碼變得無法訪問 – Ben

+0

這就解釋了它,異常是什麼導致你的測試失敗,如果你把'return'往上移,那麼函數會在'LoginView.Close )'運行,所以它不會拋出異常(因此測試會通過)修正異常,並且應該沒問題 爲什麼會有異常?誰知道?我不知道什麼樣的框架你的圖書館使用 –

+0

好吧,所以問題是由'退回'之前退出測試引起的?即「LoginView.Close」和「LoginView.Menu.SetMenuView」,因爲使用的參數是「LoginView」。但就像我之前說過的,如果我把'return'往上移,代碼的其餘部分就變得無法訪問。 – Ben

相關問題