C# 模拟另一个静态类c中的方法#
我想问一下如何在另一个类中模拟静态方法的最佳方法。我知道mock不适用于静态类。这是到目前为止我的代码。我当时不想调用SearchSomething(),因为它是外部交互C# 模拟另一个静态类c中的方法#,c#,unit-testing,mocking,moq,C#,Unit Testing,Mocking,Moq,我想问一下如何在另一个类中模拟静态方法的最佳方法。我知道mock不适用于静态类。这是到目前为止我的代码。我当时不想调用SearchSomething(),因为它是外部交互 public ResponseBase GetData(string searchId) { try { var request = new SearchRequest { SearchId = searc
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;
}
}
这是我的班级
[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);
}
}
[TestClass]
公共类单位类
{
[测试方法]
public void PositiveSearchTest()
{
//安排
字符串searchId=“name”;
var expected=newsearchrequest();
SearchtController search=新建SearchtController();
var staticMock=new Mock();
staticMock.Setup(s=>s.SearchSomething()).Returns(newresponsebase());
//表演
var-actual=search.GetData(searchId);
//断言
断言.AreEqual(实际、预期);
}
}
虽然给出了一种解决方法,但我的首选解决方案不同:修改搜索逻辑,使其不再是静态的。在那之后,你可以尽情地模仿它。静态方法总是单元测试的一大难题;我试着只在只有一种正确行为的情况下使用它们
这显然是假设您能够修改SearchLogic
。如果没有,请查看链接的问题。那么它不起作用了吗?可能是@MukeshModhvadiya的副本模拟在某些方面不起作用我使用静态的原因是我在很多地方都使用它,所以我很容易使用静态作为一个单音,如果您的DI框架没有使将对象注入到它使用的地方变得微不足道,获得一个更好的DI框架:-)我已经更改了它,使它不再是静态的。但是我可以模拟SearchLogic
中的静态方法吗?制作一个接口并模拟接口,而不是模拟具体的实现。