Это следует за шаблоном AAA? - PullRequest
2 голосов
/ 12 мая 2011

У меня есть следующий тест:

[Test]
public void VerifyThat_WhenHasInterceptorIsCalledWithAComponentModelThatHasTheLogAttribute_TheReturnValueIsTrue()
{
    // Arrange
    Mock<ComponentModel> mock = /* ... */;
    LoggingInterceptorsSelector selector = new LoggingInterceptorsSelector();
    // Act & Assert togheter
    Assert.That(selector.HasInterceptors(mock.Object), Is.True);
}

Что-то не так с объединением Act & Assert?
Что нужно сделать, чтобы исправить эту проблему, если она неправильная?
EDIT:
Как насчет этого вида теста:

[Test]
[Category("HasInterceptors() Tests")]
public void VerifyThat_WhenHasInterceptorsIsCalledWithANullComponentModel_AnArgumentNullExceptionIsThrown()
{
    LoggingModelInterceptorsSelector selector = new LoggingModelInterceptorsSelector();

    Assert.That(new TestDelegate(() => selector.HasInterceptors(null)), Throws.TypeOf<ArgumentNullException>());
}

Для правильного утверждения акт и утверждение должны быть в одной строке.По крайней мере, это то, что я понимаю из этого.

Как насчет этого:

[Test]
[Category("HasInterceptors() Tests")]
public void VerifyThat_WhenHasInterceptorsIsCalledWithANullComponentModel_AnArgumentNullExceptionIsThrown()
{
    LoggingModelInterceptorsSelector selector = new LoggingModelInterceptorsSelector();
    var testDelegate = new TestDelegate(() => selector.HasInterceptors(null));
    Assert.That(testDelegate, Throws.TypeOf<ArgumentNullException>());
}

Это лучше соответствует шаблону AAA?

Ответы [ 2 ]

4 голосов
/ 12 мая 2011

Я бы сделал:

[Test]
public void VerifyThat_WhenHasInterceptorIsCalledWithAComponentModelThatHasTheLogAttribute_TheReturnValueIsTrue()
{
    // Arrange
    Mock<ComponentModel> mock = /* ... */;
    LoggingInterceptorsSelector selector = new LoggingInterceptorsSelector();

    // Act 
    var result = selector.HasInterceptors(mock.Object);

    // Assert 
    Assert.That(result, Is.True);
}

ААА и легко читается.

3 голосов
/ 12 мая 2011

Вы не должны унифицировать акт и утверждать.

Смысл паттерна состоит в том, чтобы легко различать разные части - поэтому очень легко определить, где вы проводите тест, а затем какой метод используется.Вызывается в действии и, наконец, на что вы утверждаете.

Смешивание действия и утверждение грязи это, не говоря уже, для тех, кто привык к ААА, это застало бы их врасплох (где это действие?).


Обновление (после редактирования сообщения):

Большинство тестовых сред позволяют вам указать ожидаемое исключение (nUnit и MSTest используют ExpectedExceptionAttribute) в методе теста (это ваше утверждение),Вы все еще должны действовать отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...