Akka.NET oyuncularımı test etmeye çalışıyorum, ancak TestKit ile bazı problemler yaşıyor ve nasıl çalıştığını anlıyoruz. Orada Akka.NET içinde birim test için hiçbir resmi belgeler henüz yanaAkka.NET'de TestKit nasıl kullanılır
, ben örnek kodu için Akka.NET repo araştırmalarımız oldu, ancak örnekler benim için orada çalışmıyor kullanılır.
Referans için kullandığım testler, uygulamanızda test etmeye çalıştığım senaryoya yakın oldukları için ReceiveActorTests.cs ve ReceiveActorTests_Become.cs'dur.
İşte bazı kukla kod: Bu aktör Ben doğru Tebrik Aldı ve Veda mesajları olduğunu test etmek istiyorum
public class Greeter : ReceiveActor
{
public Greeter()
{
NotGreeted();
}
private void NotGreeted()
{
Receive<Greeting>(msg => Handle(msg));
}
private void Greeted()
{
Receive<Farewell>(msg => Handle(msg));
}
private void Handle(Greeting msg)
{
if (msg.Message == "hello")
{
Become(Greeted);
}
}
private void Handle(Farewell msg)
{
if (msg.Message == "bye bye")
{
Become(NotGreeted);
}
}
}
Verilen
ve doğru ol-devletleri girer. Bir aktör başlatmasını bu yaklaşım deneyin ve ne zaman ReceiveActorTests_Become.cs testler bakıldığında, bir aktör
var system = ActorSystem.Create("test");
var actor = system.ActorOf<BecomeActor>("become");
tarafından oluşturulur ve bir mesaj Ancak
actor.Tell(message, TestActor);
ExpectMsg(message);
tarafından gönderilen ve ileri sürülür diğerleri dayalı
: Bu benim sınavımXunit.Sdk.TrueExceptionFailed: Timeout 00:00:03 while waiting for a message of type ConsoleApplication1.Greeting
Expected: True
Actual: False
: test kiti yöntemleri (aşağıya bakınız), ben diğer müzikleri testi başarısız hatası almaya devam
public class XUnit_GreeterTests : TestKit
{
[Fact]
public void BecomesGreeted()
{
//var system = ActorSystem.Create("test-system"); // Timeout error
//var actor = system.ActorOf<Greeter>("greeter"); // Timeout error
//var actor = ActorOfAsTestActorRef<Greeter>("greeter"); // Timeout error
//var actor = ActorOf(() => new Greeter(), "greeter"); // Timeout error
//var actor = Sys.ActorOf<Greeter>("greeter"); // Timeout error
//var actor = Sys.ActorOf(Props.Create<Greeter>(), "greeter"); // Timeout error
var actor = CreateTestActor("greeter"); // Works, but doesn't test my Greeter actor, but rather creates a generic TestActor (as I understand it)
var message = new Greeting("hello");
actor.Tell(message, TestActor);
ExpectMsg(message);
}
}
Ayrıca, ExpectMsg satırını aktörün üstünden hareket ettirmeyi de denedim.Tell satırı (bir şey üzerinde harekete geçmeden önce bir şey beklemeniz ve sonra beklentiyi doğrulamanız daha mantıklı olduğundan), ancak bu aynı zamanda Zaman Aşımı hatasıyla sonuçlanır. .
Hem NUnit hem de XUnit TestKit'leri ile denedim.
Muhtemelen gözden kaçan gerçekten temel bir şey var.
Bu derin tanıtımı TestKit'e ve nasıl kullanılacağı ile ilgilenebilirsiniz. Önümüzdeki hafta canlı yayınlanması gereken uzun soluklu belgelerin habercisi >> https://petabridge.com/blog/akka-testkit-introduction/ (açıklama: Yazdım) – AndrewS