3

私は最近、xSpecification テストを実装するために MSpec を使用するとともに、BDD 設計に従うことを強く採用しました。これは、ソリューション エクスプローラー内で意図を区別するのが難しくなる、かなり非常識なクラス名につながっています。たとえば、次のとおりです。

[Subject(typeof(MuchGoodServiceOrchestrator))]
public class Given_i_am_a_logged_user_and_view_my_some_company_super_things 
    : WithSubject<MuchGoodServiceOrchestrator>

私の最初の考えのいくつかは、おそらくソリューションフォルダーを使用して、次のようなことをすることでした

Given_I_am_logged_in \ When_I_view_my_some_company_super_things.cs

これにより、さらにドリルダウンできる可能性があります

Given_I_am_logged_in \ And_things_are_good \ When_I_view_my_some_company_super_things.cs Given_I_am_logged_in \ And_things_are_bad \ When_I_view_my_some_company_super_things.cs

似たようなことをして成功した人はいますか、それとも xSpecification テストの命名で成功したものは何ですか?

4

2 に答える 2

3

警告: 私はこの分野の専門家ではなく、孤立して作業していますが、これは数か月にわたる試行錯誤に基づく個人的な見解です。

subject 属性のオーバーロードがあります[Subject(Type subjectType, string subject)]

おそらく、文字列パラメーターを使用して懸念事項を文書化できるので、次のようなものを使用するでしょう。

[Subject(typeof(MuchGoodServiceOrchestrator), "Logged in"]

-と-

[Subject(typeof(MuchGoodServiceOrchestrator), "Not logged in"]

規則を使用している場合は、それを少し拡張します

  • システムがこの特定の状態にある場合
  • こんな面白いことが起こる
  • 次に、これらは結果です

これは、 Arrange、Act、Assertパターンを表現する別の方法です。Given ( Arrange ) はコンテキストであり、テストの前提条件です。When ( Act )はテストするアクティビティで、Then ( Assert ) は期待される動作を検証する場所です。

MSpec では、通常、次のパターンを使用します。

public class when_doing_domething : with_context
{
  It should_behave_like_this;  // One or more assertions.
  It should_also_behave_like_this;
}

問題のドメインの用語を使用するには、次のようにします。

public class with_logged_in_user
{
  protected static User User;
  protected static MuchGoodServiceOrchestrator sut;
  // Arrange
  Establish context =()=> 
  {
    User = new User() { /* initialize the User object as a logged in user */ };
    sut = new MuchGoodServiceOrchestrator(User); // Dependency injection
  };
}

public class with_anonymous_user
{
  protected static User User;
  protected static MuchGoodServiceOrchestrator sut;
  // Arrange
  Establish context =()=> 
  {
    User = new User() { /* initialize the User object as anonymous or not logged in */ };
    sut = new MuchGoodServiceOrchestrator(User); // Dependency injection
  };
}

[Subject(typeof(MuchGoodServiceOrchestrator), "Logged in")]
public class when_viewing_things_as_a_logged_in_user : with_logged_in_user
{
  // Act
  Because of =()=> sut.CallTheCodeToBeTested();
  // Assert
  It should_do_this =()=> sut.Member.ShouldEqual(expectedValue); // Assert
}

[Subject(typeof(MuchGoodServiceOrchestrator), "Not logged in")]
public class when_viewing_things_while_not_logged_in : with_anonymous_user
{
  // Etc...
}
于 2011-12-09T17:31:03.507 に答える
1

特定のオブジェクトのすべてのテスト クラスを 1 つのファイルにグループ化します。たとえば、SuperThingTests には、SuperThing クラスに関するすべてのテストが含まれます。

于 2011-12-08T17:34:44.857 に答える