我有以下測試:這是否遵循AAA模式?
[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);
}
是不是有什麼毛病統一法&斷言?
如果問題不對,應該如何解決這個問題?
編輯:
什麼這種測試:
[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模式更好?
那麼應該做什麼?請參閱編輯瞭解更多詳情。 – 2011-05-12 12:26:25
但ExpectedExceptionAttribute會導致測試的Assert階段從流中消失(或者如果考慮流的屬性部分,則首先出現)。 – 2011-05-12 12:46:00
@ the_drow - 但保持清晰度和分離度。這是AAA的動力。清晰和分離,所以你不會失去任何東西。人們習慣於以這種方式進行測試。 – Oded 2011-05-12 12:52:03