2016-08-24 9 views
-1

クラスライブラリで単体テストを行っていますが、メソッドのテスト方法が残っています。私は8文字以下のパスワードを受け入れることができないかどうかを確認する、8文字以上のパスワードを受け入れることができるかどうかをチェックし、正面にスペースがあるパスワードを受け入れることができないかどうかを確認するなどのシナリオをテストする必要があります。C#unit testing a class

以下のコードは、クラスライブラリのコードです。

public class PasswordChecker 
{ 
    public bool CheckPassword(string pwd) 
    { 
     if (pwd.Length >= 8 && !pwd.StartsWith("")) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

以下のコードはテストプロジェクトのコードです。

[TestClass] 
public class PasswordCheckerTest 

{ 
    [TestMethod] 
    public void CheckPassword8CharsLong() 
    { 
     string validPassword = "12345678"; 
     string invalidPassword = "abc"; 

     PasswordChecker checker = new PasswordChecker(); 

     Assert.IsTrue(checker.CheckPassword(validPassword)); 
     Assert.IsFalse(checker.CheckPassword(invalidPassword)); 

    } 
+1

だから、正確にあなたの問題は何ですか?始める方法がわからない場合は、関連する[documentation](https://msdn.microsoft.com/en-us/library/ms182532.aspx)を確認することをお勧めします。 – bkaf

+4

!pwd.StartsWith( "")は奇妙に見えます – dlxeon

+0

あなたの問題を述べてください。アサーションを別の方法に分離することもできます。 @dlxeonに同意すると、startswith( "")という問題が発生する可能性があります。 – Doruk

答えて

1

1回のテストでこれら2つの条件をテストしないでください。また、CheckPasswordメソッドを静的にすることで、副作用がないようにすることができます。

[TestClass] 
public class PasswordCheckerTests 
{ 
    [TestMethod] 
    public void CheckPassword_PasswordLessThanEightCharacters_ReturnsFalse() 
    { 
     string invalidPassword = "1234567"; 

     PasswordChecker checker = new PasswordChecker(); 

     Assert.IsFalse(checker.CheckPassword(invalidPassword)); 
    } 

    [TestMethod] 
    public void CheckPassword_PasswordLongerThanSevenCharacters_ReturnsTrue() 
    { 
     string validPassword= "12345678"; 

     PasswordChecker checker = new PasswordChecker(); 

     Assert.IsTrue(checker.CheckPassword(validPassword)); 
    } 
} 
0
if(pwd.Length < 8 || pwd.Contains(" ") == true){ //VALID } 
+0

詳細を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。 – Paritosh

0

私はあなたのコードをこのように書くでしょう。パスワードがnullでなく、いないスペースと8文字以上

public static bool CheckPassword(string pwd) 
{ 
    return pwd != null && !pwd.StartsWith(" ") && pwd.Length >= 8; 
} 
0

で始まる場合、私はAAAの原則使用を言うだろう、それは次のようになります。

A:あなたが呼び出すために必要なものを初期化する場所を手配しますテストされるメソッド。

A:実際に電話をかける場所。

A:あなたが期待していたアサーションをどこにアサートしますか?

2

おそらくエラーが原因pwd.StartsWith("")ステートメントに、しかし、あなたのテストを見て、一つの試験方法では、あまりにも多くのテストがあると、それは3つのメソッドに分割しなければならない、

[TestMethod] 
    public void GivenValidPassword_WhenCheckPassword_ThenReturnTrue(){ 
     var password= "12345678"; 

     var sut = new PasswordChecker(); 
     var result = sut.CheckPassword(password); 

      Assert.IsTrue(result); 
    } 

    [TestMethod] 
    public void GivenPasswordLessThan8Characters_WhenCheckPassword_ThenReturnFalse(){ 
     var password= "1278"; 

     var sut = new PasswordChecker(); 
     var result = sut.CheckPassword(password); 

      Assert.IsFalse(result); 
    } 

    [TestMethod] 
    public void GivenPasswordStartWithSpace_WhenCheckPassword_ThenReturnFalse(){ 
     var password= " 12345678"; 

     var sut = new PasswordChecker(); 
     var result = sut.CheckPassword(password); 

      Assert.IsFalse(result); 
    }