2016-08-30 4 views
1

Wie kann ich Typen in meine Komponententests eingeben?Wie übergibt man Typen an die Testmethode?

public void MethodUnderTest() 
{ 
    try 
    { 
     var businessService = _businessService.DoWork(); 
    } 
    catch (SomeException exception) 
    { 
     //do some stuff 
    } 
    catch (SomeOtherException exception) 
    { 
     //do other stuff 
    } 
} 


My unit test should be something like this: 

[TestCase(typeof(SomeException))]  
[TestCase(typeof(SomeOtherException))] 
public void UnitTest(Exception exception) 
{ 
    _businessService.Setup(x=>x.DoWork).Throws.InstanceOf<exception>(); 
    //verify that when we called DoWork, that the logic inside of one of the catches was executed 
} 

Antwort

0

Eine Möglichkeit, dies umgesetzt werden kann wäre, durch abgeleitete Generika verwendet ..

erhalten Sie einen Testfall Quelle in der Testvorrichtung haben.

public static List<Exception> Exceptions => new List<Exception> 
     { 
      new InvalidOperationException(), 
      new OverflowException() 
     }; 

und dann Unit-Test-Methode ändern, wie:

[Test] 
[TestCaseSource(nameof(Exceptions))] 
public void UnitTest<T>(T exception) where T : Exception, new(){ 
    _businessService.Setup(x=>x.DoWork).Throws.InstanceOf<T>(); 
     //verify that when we called DoWork, that the logic inside of one of the catches was executed 
    } 

Dann wird der Code, um die Typen von der Instanz der Ausnahme im Testfall Quelle ableiten würde. Ich kann mir keinen Weg vorstellen, dies zu tun, ohne die Ausnahmen zu instanziieren ...

0

Sie haben nicht gesagt, was Sie versucht haben, das hat nicht funktioniert. Auf der Oberfläche erscheint es einfach genug, aber vielleicht verstehe ich nicht, was Sie tun wollen.

Der von Ihnen angezeigte Beispieleinheitstest ist falsch. Es braucht eine Exception als Argument, aber Sie geben ihm einen Type. Basierend auf Ihrem Titel sollte die Testmethode einen Typ akzeptieren. Dann tun Sie etwas wie ...

[TestCase(typeof(SomeException))] 
[TestCase(typeof(SomeOtherException))] 
public void UnitTest(Type exceptionType) 
{ 
    Assert.That(()=>_businessService.Setup(x=>x.DoWork), 
     Throws.InstanceOf(exceptionType)); 
} 

`` `

Haben falsch verstehe ich das Problem?

+0

Ich glaube nicht, dass Ihr Code kompiliert, Sie verwenden AusnahmeTyp als Typ, während es eine Variable ist. –

+0

Richtig ... Sie können das Generische hier nicht verwenden. Ich habe den Code geändert. – Charlie

+0

Ah! Ich habe mich gefragt, wie ich diesen Fehler gemacht habe ... Laut einer separaten Mitteilung, die ich erhalten habe, sieht es so aus, als hätte Sam C. den generischen Anruf hinzugefügt. Ich fürchte, dass ich SO nicht ganz so groke, besonders, warum Leute die Antworten anderer Leute bearbeiten, ohne eine öffentliche Spur hinter sich zu lassen. :-( – Charlie

Verwandte Themen