我正在尝试在类中模拟泛型方法。我是Moq的新手,我无法找到模仿方法的正确方法。
我需要测试和模拟的代码。
public class WebServicesManager
{
public static void Function1<TClient>()
where TClient : SoapHttpClientProtocol, new()
{
//code
}
}
泛型方法Function1
接受泛型类型,它继承自SoapHttpClientProtocol
,它基本上是传统asmx Web服务的代理。
为了测试上面的方法,我试图模拟泛型类型参数TClient
。但我需要正确的方法来执行此操作,我尝试了以下代码,但我无法找到正确的代码。
[TestMethod]
public void Function1Test()
{
var mockService = new Mock<SoapHttpClientProtocol>();
WebServicesManager.Function1<????>();
}
我想到的一种方法是使用继承自FakeClass
的{{1}},然后使用Fake类调用泛型方法。
另外,我已经阅读了其他答案here,其中大多数建议使用接口,这是正确的但在我的情况下,因为代理代码是自动生成的(客户端代理代码),所以我有我不能使用接口的限制。
我是否可以模拟类SoapHttpClientProtocol
并将其作为通用参数传递?
答案 0 :(得分:1)
我想到的一种方法是使用从SoapHttpClientProtocol继承的FakeClass,然后使用Fake类调用通用方法。
是否可以模拟SoapHttpClientProtocol类并将其作为通用参数传递?
是的,如果您将模拟包装在FakeClass中。
PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062
Duplicate entry '813' for key 'PRIMARY': INSERT INTO {gmap_taxonomy_node}
(nid, tid, marker) VALUES (:db_insert_placeholder_0,
:db_insert_placeholder_1, :db_insert_placeholder_2); Array (
[:db_insert_placeholder_0] => 813 [:db_insert_placeholder_1] => 812
[:db_insert_placeholder_2] => Other ) in gmap_taxonomy_node_update()(line
217 of /var/www/most/public/sites/all/modules/gmap/gmap_taxonomy.module).