如何对在其方法中获取对另一个actor的引用的actor进行单元测试?

时间:2016-11-17 22:44:56

标签: c# unit-testing actor azure-service-fabric stateful-actor-service

我有一个看起来像这样的演员:

public class MyActor : Actor, IMyActor
{
    public async Task<ICustomerActor> GetCustomer()
    {
        var customerId = await StateManager.TryGetStateAsync<ActorId>(CustomerIdState);

        return customerId.HasValue
            ? ActorProxy.Create<ICustomerActor>(customerId.Value)
            : null;
    }
}

我想知道是否有办法测试这种类型的互动。我们使用ServiceFabric.Mocks库来设置在正在运行的服务之外创建actor所需的所有脚手架,但是当它到达ActorProxy.Create<ICustomerActor>(customerId.Value)行时,它会抛出一个异常,因为没有任何东西像真的一样被绑在一起服务将是。

System.ArgumentException
Failed to determine the current application, please provide application name.
Parameter name: applicationName
   at Microsoft.ServiceFabric.Actors.Generator.ActorNameFormat.GetFabricServiceUri(Type actorInterfaceType, String applicationName, String serviceName)
   at Microsoft.ServiceFabric.Actors.Client.ActorProxyFactory.CreateActorProxy[TActorInterface](ActorId actorId, String applicationName, String serviceName, String listenerName)
   at Microsoft.ServiceFabric.Actors.Client.ActorProxy.Create[TActorInterface](ActorId actorId, String applicationName, String serviceName, String listenerName)

1 个答案:

答案 0 :(得分:3)

将ActorProxyFactory注入调用的Actor构造函数,并使用它来创建ActoryProxy实例。如展示herehere

然后使用模拟库创建模拟代理实例。像这样:https://github.com/loekd/ServiceFabric.Mocks