Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何单元测试Akka.Net参与者状态(使用been())_Unit Testing_Akka.net - Fatal编程技术网

Unit testing 如何单元测试Akka.Net参与者状态(使用been())

Unit testing 如何单元测试Akka.Net参与者状态(使用been()),unit-testing,akka.net,Unit Testing,Akka.net,我有一个Actor,当它收到StartMessage时,它应该使用been(start)更改状态。如何单元测试参与者的状态是否已更改为start() MyActor类 公共类MyActor:ReceiveActor { 公共MyActor() { 接收(s=>{ been(start);//这就是我想要进行的单元测试 }); } 私有void已启动() { 控制台。WriteLine(“呜呼!我开始了!”); } } 单元测试 [TestMethod] public void My_actor

我有一个Actor,当它收到
StartMessage
时,它应该使用
been(start)
更改状态。如何单元测试参与者的状态是否已更改为
start()

MyActor类

公共类MyActor:ReceiveActor
{
公共MyActor()
{
接收(s=>{
been(start);//这就是我想要进行的单元测试
});
}
私有void已启动()
{
控制台。WriteLine(“呜呼!我开始了!”);
}
}
单元测试

[TestMethod]
public void My_actor_更改_state_为_start()
{
//安排
var actor=actorofastestactoref(Props.Create(()=>newmyactor());
//表演
actor.Tell(newstartMessage());
//断言

var actorsCurrentState=actor.UnderlyingActor.STATE;//您可以通过消息传递进行正常测试。例如,您在启动状态下处理哪些消息?我假定您的示例已简化为启动状态中的Console.WriteLine操作

如果您先发送StartMessage,然后再发送第二条消息,该消息在处于Started状态时会被处理,那么您可以在对该第二条消息的响应中断言

作为一个简单的建议:

private void Started()
{
    Receive<StartMessage>(msg => {
        Sender.Tell(new AlreadyStarted());
    } 
}
private void start()
{
接收(msg=>{
Sender.Tell(新的AlreadyStarted());
} 
}
如果在Started状态下收到StartMessage,则可以在收到AlreadyStarted消息时进行断言


有关更多信息,请查看Petabridge的文章

我已经从头到尾阅读了Petebridge的单元测试指南好几次了:-)我将用一些支持您答案的措辞来更新我的问题。我希望会有不同的答案,但我认为您已经确认,您正在编写这样的单元测试的场景可能表明代码可能是最好坚持黑盒消息传递的:)