Предостережение : Я не эксперт в этом, и я работаю изолированно, но это мой личный опыт, основанный на нескольких месяцах проб и ошибок.
Перегрузка атрибута субъекта [Subject(Type subjectType, string subject)]
Возможно, вы могли бы использовать строковый параметр для документирования вашей проблемы, поэтому, возможно, вы бы использовали что-то вроде:
[Subject(typeof(MuchGoodServiceOrchestrator), "Logged in"]
-и-
[Subject(typeof(MuchGoodServiceOrchestrator), "Not logged in"]
Более подробно об этом, если вы используете соглашение
- Учитывая , система находится в этом конкретном состоянии
- Когда происходит эта интересная вещь
- Тогда это последствия
Это еще один способ выражения шаблона Arrange, Act, Assert . Учитывая ( Упорядочить ) - ваш контекст, предварительные условия для теста. Когда ( Act ) - это тестируемое вами действие, а Тогда ( Утверждение ) - это место, где вы проверяете ожидаемое поведение.
в 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...
}