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

本文关键字:参与者 引用 单元测试 另一个 获取 方法 | 更新日期: 2023-09-27 18:18:34

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

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;
    }
}

我想知道是否有一种方法来测试这种类型的交互。我们使用serviceffabric。mock库来设置在运行的服务之外创建参与者所需的所有脚手架,但是当它到达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)

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

将ActorProxyFactory注入到调用Actor的构造函数中,并使用它来创建ActoryProxy实例。如这里或这里所示。

然后使用模拟库创建模拟代理工厂。比如这个:https://github.com/loekd/ServiceFabric.Mocks