如何对在其方法内获取对另一个参与者的引用的参与者进行单元测试?
How to unit-test an actor that gets a reference to another actor inside its method?
我有一个看起来像这样的演员:
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)
将 ActorProxyFactory 注入到调用的 Actor 构造函数中,并使用它来创建 ActoryProxy 实例。如图所示 here or here.
然后使用模拟库创建模拟代理工厂。就像这个:https://github.com/loekd/ServiceFabric.Mocks
我有一个看起来像这样的演员:
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)
将 ActorProxyFactory 注入到调用的 Actor 构造函数中,并使用它来创建 ActoryProxy 实例。如图所示 here or here.
然后使用模拟库创建模拟代理工厂。就像这个:https://github.com/loekd/ServiceFabric.Mocks