2017-10-13 65 views
0

时,我有以下interface我喜欢假:CouldNotSetReturnDueToNoLastCallException抛出异常

public interface ElementSettings 
{ 
    ValueFormatter Formatter { get; } 

    IEnumerable<ValidationRule> GetValidationRules(); 
} 

我想抛出一个异常,当Formatter被得到。我尝试了以下方式:

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

但是我在代码的最后一行得到一个百达CouldNotSetReturnDueToNoLastCallException。我已阅读异常消息中的所有提示,但无法找到任何错误信息。

回答

1

您可以发布包含堆栈跟踪的异常输出吗?下面的测试通过我:

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

有时一个小字母是有差别的。正如我所看到的,我使用了NUnit Framework的扩展方法'Throws'而不是'Throw'(没有's')。那当然不起作用。谢谢你的帮助。 – scher