ユニットテスト--ベストプラクティス

6552 ワード

1、試験方法の命名

  • 被試験方法_テストケース_呼び出しスキームの予想動作
  • public  class StringCalculator
    {
        public object Add(string v)
        {
            return int.Parse(y);
        }
    }

    テストコード
    [Fact]
    public void Add_SingleNumber_ReturnsSameNumber()
    {
        var stringCalculator = new StringCalculator();
        var actual = stringCalculator.Add("0");
        Assert.Equal(0, actual);
    }

     

    2、ユニットテストモード

  • Arrangeはテスト対象を手配し、テストデータ
  • を準備する.
  • Act実行テスト動作
  • Assert断言期限超過行為
  • [Fact]
    public void Add_EmptyString_ReturnsZero()
    {    // Arrange   
        var stringCalculator = new StringCalculator();
         // Act    
        var actual = stringCalculator.Add("");
         // Assert    
        Assert.Equal(0, actual); 
    }

     

    3、試験方法論

  • テストの作成時に動作に重点を置く必要がある
  • ファンタジー文字列では、これらの値を定数
  • に割り当てるのが良い方法です.
    [Fact]
    void Add_MaximumSumResult_ThrowsOverflowException()
    {
        var stringCalculator = new StringCalculator(); 
        const string MAXIMUM_RESULT = "1001";
        Action actual = () => stringCalculator.Add(MAXIMUM_RESULT);
        Assert.Throws(actual);
    }

     
  • 手動文字列の直列および論理条件、例えばif、while、forおよびswitchなどの
  • を回避する.
    // Bad Test
    [Fact]
    public void Add_MultipleNumbers_ReturnsCorrectResults()
    {
        var stringCalculator = new StringCalculator();
        var expected = 0;
        var testCases = new[] { "0,0,0", "0,1,2", "1,2,3" };
        foreach (var test in testCases)
        { 
            Assert.Equal(expected, stringCalculator.Add(test)); 
            expected += 3; 
        }
    }
    
    //Good Test
    [Theory]
    [InlineData("0,0,0", 0)]
    [InlineData("0,1,2", 3)]
    [InlineData("1,2,3", 6)]
    public void Add_MultipleNumbers_ReturnsSumOfNumbers(string input, int expected)
    {
        var stringCalculator = new StringCalculator();
        var actual = stringCalculator.Add(input);
        Assert.Equal(expected, actual);
    }
  • 複数の断言を避ける(方法同上)
  • プライベートメソッドを単独でテストする必要はありません