2017-10-13 57 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