我正在为Service Fabric参与者编写一些单元测试。指南here建议使用一个名为ServiceFabric.Mocks的NuGet程序包,该程序包简化了各种Service Fabric实体的模拟。
到目前为止,所有这些都说得通。我可以使用以下代码为演员提供具体的实现:
private MyActor CreateActor(ActorId id)
{
Func<ActorService, ActorId, ActorBase> factory = (service, actorId) => new MyActor(service, id);
var svc = MockActorServiceFactory.CreateActorServiceForActor<MyActor>(factory);
var actor = svc.Activate(id);
return actor;
}
只要我坚持打包文档中的示例并测试单个方法的结果,就可以开始设置。但是,我有一个方法可以在actor中调用另一个方法并使用其结果。看起来如下:
public class MyActor : Actor, IMyActor
{
public async Task<string> DoThis()
{
var result = await DoThat();
//...
}
public virtual async Task<string> DoThat()
{
//...
}
}
我希望能够在actor中模拟DoThat方法,因此我可以测试DoThis方法,但是由于ServiceFabric.Mocks的结果是一个具体的对象,因此尚不清楚如何执行该操作。
我认为前进的唯一两种方法是:1)确定创建已实例化类的模拟的方法2)自己重新创建此模拟库的功能,以便在创建具体对象之前可以模拟该方法]
有没有办法不借助#2而接近#1?
我正在为Service Fabric参与者编写一些单元测试。这里的指南建议使用一个名为ServiceFabric.Mocks的NuGet程序包,该程序包简化了各种Service的模拟的旋转...
代替使用模拟,您可以在单元测试附近创建一个新类,该类继承自MyActor
,并出于测试目的而覆盖DoThat
实现: