我想问一下如何在另一个类中模拟静态方法的最佳方法。我知道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);
}
}
答案 0 :(得分:1)
虽然this question提供了一种方法来解决这个问题,但我首选的解决方案会有所不同:修改SearchLogic
使其不再是静态的。之后,您可以根据自己心中的内容嘲笑它。静态方法总是一个单元测试的痛苦;我尝试仅在有一个且只有一个正确行为的情况下使用它们。
这显然假设您可以修改SearchLogic
。如果您没有,请查看链接的问题。