2017-10-13 3 views
0

Ich habe folgendes interface, dass ich zu fälschen mag:CouldNotSetReturnDueToNoLastCallException beim Werfen Ausnahme

public interface ElementSettings 
{ 
    ValueFormatter Formatter { get; } 

    IEnumerable<ValidationRule> GetValidationRules(); 
} 

Ich möchte eine Ausnahme ausgelöst, wenn der Formatter bekommen wird. Ich versuchte ihm die folgende Art und Weise:

var settings = Substitute.For<ElementSettings>(); 
var exception = new ArgumentException("alidsfjmlisa"); 
settings.When(s => { var tmp = s.Formatter; }).Throws(exception); 

Aber ich habe durchweg ein CouldNotSetReturnDueToNoLastCallException in der letzten Zeile des Codes. Ich habe alle Hinweise in der Ausnahmebedingungsnachricht gelesen, kann aber keinen Missbrauch finden.

Antwort

1

Können Sie bitte die Ausnahme Ausgabe einschließlich Stack-Trace? Der folgende Test besteht für mich:

public class ValueFormatter { } 
    public class ValidationRule { } 

    public interface ElementSettings 
    { 
     ValueFormatter Formatter { get; } 
     IEnumerable<ValidationRule> GetValidationRules(); 
    } 

    [Test] 
    public void Sample() 
    { 
     var sub = Substitute.For<ElementSettings>(); 
     var exception = new ArgumentException("alidsfjmlisa"); 
     sub.When(x => { var tmp = x.Formatter; }).Throw(exception); 
     Assert.Throws<ArgumentException>(() => 
     { 
      var tmp = sub.Formatter; 
     }); 
    } 
+1

Manchmal macht ein kleiner Brief den Unterschied. Wie ich sehen kann, benutzte ich die Erweiterungsmethode 'Throws' des NUnit Frameworks anstelle von' Throw' (ohne 's'). Das funktioniert natürlich nicht. Danke für Ihre Hilfe. – scher