1)MethodName_StateUnderTest_ExpectedBehavior
Public void Sum_NegativeNumberAs1stParam_ExceptionThrown()
Public void Sum_NegativeNumberAs2ndParam_ExceptionThrown ()
Public void Sum_simpleValues_Calculated ()
出典: 単体テストの命名基準
2)アンダースコアによる各単語の分離
Public void Sum_Negative_Number_As_1st_Param_Exception_Thrown()
Public void Sum_Negative_Number_As_2nd_Param_Exception_Thrown ()
Public void Sum_Simple_Values_Calculated ()
私はこの一人の男についてあなたとほとんど一緒です。使用した命名規則は次のとおりです。
テスト名にはさらに何が必要ですか?
Ray's answer に反して、Testプレフィックスは必要ないと思います。それはテストコードです、私たちはそれを知っています。コードを識別するためにこれを行う必要がある場合は、より大きな問題が発生します。テストコードを本番コードと混同しないでください。
アンダースコアの長さと使用に関しては、そのテストコード、誰が気にしますか?読みやすく、テストが何をしているかが明確である限り、あなたとあなたのチームだけがそれを見るでしょう。 :)
とは言うものの、私はまだテストとテストが初めてです 冒険をブログに書いています :)
これも読む価値があります: 構造化単体テスト
構造には、テストされるクラスごとにテストクラスがあります。それはそれほど珍しいことではありません。しかし、私にとって珍しいのは、テスト対象のメソッドごとにネストされたクラスがあったことです。
例えば.
using Xunit;
public class TitleizerFacts
{
public class TheTitleizerMethod
{
[Fact]
public void NullName_ReturnsDefaultTitle()
{
// Test code
}
[Fact]
public void Name_AppendsTitle()
{
// Test code
}
}
public class TheKnightifyMethod
{
[Fact]
public void NullName_ReturnsDefaultTitle()
{
// Test code
}
[Fact]
public void MaleNames_AppendsSir()
{
// Test code
}
[Fact]
public void FemaleNames_AppendsDame()
{
// Test code
}
}
}
理由は次のとおりです。
1つには、テストを整理するのに良い方法です。メソッドのすべてのテスト(またはファクト)はグループ化されます。たとえば、CTRL + M、CTRL + Oショートカットを使用してメソッド本体を折りたたむと、テストを簡単にスキャンしてコードの仕様のように読み取ることができます。
私もこのアプローチが好きです:
MethodName_StateUnderTest_ExpectedBehavior
だからおそらく調整する:
StateUnderTest_ExpectedBehavior
各テストは既にネストされたクラスにあるため
私はMethodName_DoesWhat_WhenTheseConditions
の規則を使用する傾向があるので、例えば:
Sum_ThrowsException_WhenNegativeNumberAs1stParam
しかし、私がよく見ているのは、テスト名を
また、次のBDD/Gherkin構文に従います。
次の方法でテストに名前を付けることになります:UnderTheseTestConditions_WhenIDoThis_ThenIGetThis
あなたの例に:
WhenNegativeNumberAs1stParam_Sum_ThrowsAnException
ただし、テストをアルファベット順に配置するか、VisStudioのメンバードロップダウンボックスにアルファベット順に表示することができ、1つのメソッドのすべてのテストがグループ化されるため、テストするメソッド名を最初に置くことをお勧めします。
いずれの場合も、テスト名のメジャーセクションをアンダースコアで区切るのが好きです。すべてのWordではなく、読みやすくポイントを取得しやすいと思うからですテスト全体。
つまり、Sum_ThrowsException_WhenNegativeNumberAs1stParam
はSum_Throws_Exception_When_Negative_Number_As_1st_Param
よりも優れています。
テストメソッドには、アンダースコアやセパレータなしで「PascalCasing」を使用する他のメソッドと同じように名前を付けます。メソッドのpostfixTestはそのままにしておきます。値が追加されないためです。メソッドがテストメソッドであることは、属性TestMethodで示されます。
[TestMethod]
public void CanCountAllItems() {
// Test the total count of items in collection.
}
各テストクラスは他の1つのクラスのみをテストする必要があるため、クラス名はメソッド名から除外します。テストメソッドを含むクラスの名前は、「Tests」という接尾辞が付いたテスト対象のクラスのような名前になります。
[TestClass]
public class SuperCollectionTests(){
// Any test methods that test the class SuperCollection
}
例外または不可能なアクションをテストするメソッドの場合、テストメソッドの先頭にWordCannotを付けます。
[TestMethod]
[ExpectedException(typeOf(ArgumentException))]
public void CannotAddSameObjectAgain() {
// Cannot add the same object again to the collection.
}
私の命名規則は、Bryan Cookの記事 "TDD Tips:命名規則とガイドラインのテスト" に基づいています。この記事はとても役に立ちました。
CamelCasingは単語を分離し、アンダーバーは命名スキームの部分を分離するため、最初の名前のセットは読みやすいです。
また、関数名またはそれを囲む名前空間またはクラスのいずれかに「テスト」を含める傾向があります。