J'utilise NUnit et Rhino Mocks. J'utilise la syntaxe AAA et je fais l'arrangement et l'acte dans la méthode d'installation, et chaque méthode de test est un assert. Comme on pouvait s'y attendreExpectedException dans NUnit SetUp
[TestFixture]
public class When_subSystem_throws_exception
{
SomeClass subject; // System under test
[SetUp]
public void Setup()
{
// Arrange
IDependency dependency = MockRepository.GenerateStub<IDependency>();
dependency.Stub(m => m.DoStuff()).Throw(new Exception()); // This method is called from within SomeMethod()
subject = new SomeClass(dependency);
// Act
subject.SomeMethod("Invalid Input");
}
// Assert
[Test]
public void should_log_an_exception_to_the_logger()
{
// Do stuff to verify that an exception has been logged
}
// More tests
}
, le code dans SomeMethod() renvoie une exception (comme prévu), qui fait de tous les tests échouent (indésirables). Je contourne cela en faisant
try
{
// Act
subject.SomeMethod("Invalid Input");
}
catch(Exception ex)
{
// Swallow, this exception is expected.
}
Mais c'est juste moche.
Ce que je voudrais être en mesure de faire est
[SetUp]
[ExpectedException] // <-- this works for Test methods, but not for SetUp methods
public void Setup()
{
// etc...
}
, mais je ne peux pas trouver quelque chose comme ça.
Connaissez-vous quelque chose?
Comment pouvez-vous assurer que l'exception a été lancée? – Simone
@Simone désolé, je ne comprends pas ce que vous dites. –
Si vous voulez tester si l'exception est levée ou non, comment pouvez-vous vérifier cela avec un tel code? s'il est lancé, vous ne faites rien de différent que s'il n'est pas lancé. – Simone