Ste*_*ice 5 unit-testing azure-service-fabric
我已经开始为具有状态的新演员编写单元测试。状态在 OnActivateAsync 方法中初始化,该方法在 Actor 激活时由 Service Fabric 调用。
在单元测试时,我自己创建 Actor,并且由于该方法受到保护,我无法从单元测试中访问自己调用该方法。
我想知道这种测试的常用方法。我可以模拟 Actor 并模拟状态,但对于我想测试的代码,请调用原始代码。我想知道是否还有另一种我没有遇到过的方法。
另一种方法是将状态初始化移动到其他地方,例如公共方法或构造函数中,但 Actor 的模板在那里有代码,因此这可能是最佳实践。
使用最新版本的 ServiceFabric.Mocks NuGet 包。它包含调用 OnActivateAsync 受保护方法的特殊扩展以及用于 ServiceFabric 单元测试的整个工具集。
var svc = MockActorServiceFactory.CreateActorServiceForActor<MyActor>();
var actor = svc.Activate(new ActorId(Guid.NewGuid()));
actor.InvokeOnActivateAsync().Wait();
Run Code Online (Sandbox Code Playgroud)
我知道这并不理想,但您可以使用反射来调用该OnActivateAsync()方法。
例如,
var method = typeof(ActorBase).GetMethod("OnActivateAsync", BindingFlags.Instance | BindingFlags.NonPublic);
await (Task)method.Invoke(actor, null);
Run Code Online (Sandbox Code Playgroud)
这样,您将测试您想要测试的实际方法,并且也不会暴露您实际上不想暴露的方法。
您可能会发现将参与者的创建和手动调用分组到OnActivateAsync()单个方法中非常有用,以便在整个测试套件中使用它并模仿原始的 Service Fabric 行为。
| 归档时间: |
|
| 查看次数: |
1745 次 |
| 最近记录: |