2017-10-13 6 views
0

je la interface suivante que j'aime faux:CouldNotSetReturnDueToNoLastCallException en jetant exception

public interface ElementSettings 
{ 
    ValueFormatter Formatter { get; } 

    IEnumerable<ValidationRule> GetValidationRules(); 
} 

Je voudrais lancer une exception, lorsque le Formatter est obtenu. Je l'ai essayé de la façon suivante:

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

Mais je reçois un AllWays CouldNotSetReturnDueToNoLastCallException dans la dernière ligne du code. J'ai lu tous les indices dans le message d'exception, mais je ne trouve aucun abus.

Répondre

1

Pouvez-vous s'il vous plaît publier la sortie de l'exception, y compris la trace de la pile? Le test suivant passe pour moi:

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

Parfois, une petite lettre fait la différence. Comme je peux le voir, j'ai utilisé la méthode d'extension 'Throws' du framework NUnit au lieu de' Throw' (sans 's'). Cela ne marche bien sûr pas. Merci de votre aide. – scher