在另一个静态类c#中模拟一个方法

时间:2017-04-21 05:21:26

标签: c# unit-testing mocking moq

我想问一下如何在另一个类中模拟静态方法的最佳方法。我知道mock不适用于静态类。到目前为止,这是我的代码。我不想当时调用SearchSomething(),因为它的外部互动

public ResponseBase GetData(string searchId)
    {
        try
        {
            var request = new SearchRequest 
            {
                SearchId = searchId
            };
            var response = SearchLogic.SearchSomething(request);
            return response;
        }
        catch (Exception e)
        {
            return ResponseBase.ExceptionHandling(e);
        }
    }

public class SearchLogic(){
    public static ResponseBase SearchSomething(SearchRequest request)
    {
        //Do Something
        return  new ResponseBase;
    }
}

这是我的UnitClass

[TestClass]
public class UnitClass
{

    [TestMethod]
    public void PositiveSearchTest()
    {
        //arrange
        string searchId = "name";
        var expected = new SearchRequest();
        SearchtController search = new SearchtController();

        var staticMock = new Mock<SearchLogic>();
        staticMock.Setup(s => s.SearchSomething()).Returns(new ResponseBase());

        //act
         var actual = search.GetData(searchId);

        //assert
         Assert.AreEqual(actual, expected);
    }
}

1 个答案:

答案 0 :(得分:1)

虽然this question提供了一种方法来解决这个问题,但我首选的解决方案会有所不同:修改SearchLogic使其不再是静态的。之后,您可以根据自己心中的内容嘲笑它。静态方法总是一个单元测试的痛苦;我尝试仅在有一个且只有一个正确行为的情况下使用它们。

这显然假设您可以修改SearchLogic。如果您没有,请查看链接的问题。

相关问题