2016-05-27 45 views
4

對於像的方法:有了Moq,我怎樣才能用out參數來模擬受保護的方法?

protected virtual bool DoSomething(string str) { } 

我通常嘲笑它通過:

var mockModule = new Mock<MyClass> { CallBase = true }; 
mockModule.Protected().Setup<bool>("DoSomething", ItExpr.IsAny<string>()).Returns(true); 

但對等的方法:

protected virtual bool DoSomething(out string str) { } 

我怎麼能嘲笑呢?

+0

可能是這樣的重複:http://stackoverflow.com/questions/1068095/assigning-out-ref-parameters-in-moq – Rob

+2

@Rob,你聲稱這是它自己的副本?這看起來像是一個錯誤,甚至允許,lmafo! –

+0

@DavidPine對不起,鏈接錯誤! – Rob

回答

0

它可以通過使用Typemock Isolator來完成,你可以嘲笑你的非公共方法和輕易改變自己out和ref參數:

[TestMethod, Isolated] 
public void test() 
{ 
    // Arrange 
    string str; 
    SomeClass classUnderTest = new SomeClass(); 
    Isolate.NonPublic.WhenCalled(classUnderTest, "DoSomething").AssignRefOut("test").IgnoreCall(); 

    // Act 
    classUnderTest.foo(out str); 

    // Assert 
    Assert.AreEqual("test", str); 
} 


public class SomeClass 
{ 
    public void foo(out string str) 
    { 
     DoSomething(out str); 
    } 

    protected virtual bool DoSomething(out string str) 
    { 
     str = "boo"; 
     return true; 
    } 
} 

你可以閱讀更多關於它here

相關問題