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