2015-11-04 49 views
1

方法,我的方法:我怎麼能嘲笑有HtttpRequestBase參數

public override someClass getX(HttpRequestBase request){ ... } 

現在,我想嘲笑它。

我試圖

mockProvider.Setup(x => x.getX(It.IsAny<HttpRequestWrapper>())).Returns(someClassInstance); 

但它返回null,不someClassInstance(通過調試我可以看到它不爲空)。 我能做什麼?謝謝!

+0

你在'x.GetX一個錯字(It.IsAny ())'不應該'x.getX( It.IsAny ())'? – Elph

+1

'getX'返回'int',所以默認返回0(不是'null')。你確定這個方法有問題嗎? – Alexander

+0

@Elph,這個錯字只在這裏。我只是試圖簡化這種情況。 ,但其核心思想是:我可以插入什麼.isAny <>在這種情況下 – arielorvits

回答

1

我不完全明白你爲什麼期望結果是「2」,也不能看到someClassInstance的聲明來驗證Assert是否應該爲NULL。

不過,我實現這些方法和纏了個試驗:

using System.Web; 

using Moq; 

using NUnit.Framework; 

public class FooBase 
{ 
    public virtual ResultObject getX(HttpRequestBase request) 
    { 
     return new ResultObject { Id = 2 }; 
    } 
} 

public class Foo : FooBase 
{ 
    public override ResultObject getX(HttpRequestBase request) 
    { 
     return new ResultObject { Id = 4 }; 
    } 
} 

public class ResultObject 
{ 
    public int Id { get; set; } 
} 

[TestFixture] 
public class Test 
{ 
    Mock<Foo> mockProvider = new Mock<Foo>(); 

    [Test] 
    public void FooTest() 
    { 
     // Arrange 
     var fakedResultObject = new ResultObject { Id = 8 }; 
     mockProvider.Setup(x => x.getX(It.IsAny<HttpRequestWrapper>())).Returns(fakedResultObject); 

     // Act 
     var result = mockProvider.Object.getX(new HttpRequestWrapper(new HttpRequest("filename", "http://foo.org", "querystring"))); 

     //Assert 
     Assert.AreEqual(8, result.Id); 
    } 
} 
+0

也許這是另一個問題,請再次詢問 http://stackoverflow.com/q/33532536/3202422 謝謝 – arielorvits