SlideShare ist ein Scribd-Unternehmen logo
1 von 62
Downloaden Sie, um offline zu lesen
Blood, sweat and
tears
... or be smart when testing your Akka code
• PHP, NodeJS, AngularJS, Python, Java, Scala;
• Living in the Netherlands, working at
• Developing release automation product: XL
Release.
About me
github:mkotsur/restito
• TDD is great when done properly!
• Reactive complexity;
• Learned a lot during last 4 months.
Why testing?
• Tests;
• Better tests;
• Problem-less tests.
• Concurrency, parallelism, state.
• Not just messages;
• Willing to help you with the TestKit.
Not only messages
Not only messages
Not only messages
Not only messages
Not only messages
object IncrementorActorMessages {
case class Inc(i: Int)
}
class IncrementorActor extends Actor {
var sum: Int = 0
override def receive: Receive = {
case Inc(i) => sum = sum + i
}
}
Sync unit-testing
• Works with `CallingThreadDispatcher`;
• Supports either message-sending style, or direct
invocations.
class IncrementorActorTest extends
TestKit(ActorSystem(“test-system")) {
...
}
it("should have sum = 0 by default") {
val actorRef = TestActorRef[IncrementorActor]
actorRef.underlyingActor.sum shouldEqual 0
}
it("should increment on new messages") {
val actorRef = TestActorRef[IncrementorActor]
actorRef ! Inc(2)
actorRef.underlyingActor.sum shouldEqual 2
actorRef.underlyingActor.receive(Inc(3))
actorRef.underlyingActor.sum shouldEqual 5
}
class LazyIncrementorActor extends Actor {
var sum: Int = 0
override def receive: Receive = {
case Inc(i) =>
Future {
Thread.sleep(100)
sum = sum + i
}
}
}
Not good enough
Not only messages
object IncrementorActorMessages {
case class Inc(i: Int)
case object Result
}
class IncrementorActor extends Actor {
var sum: Int = 0
override def receive: Receive = {
case Inc(i) => sum = sum + i
case Result => sender() ! sum
}
}
New message
it("should have sum = 0 by default") {
val actorRef = system
.actorOf(Props(classOf[IncrementorActor]))
val probe = TestProbe()
actorRef.tell(Result, probe.ref)
probe.expectMsg(0)
}
Using TestProbe
it("should have sum = 0 by default") {
val actorRef = system
.actorOf(Props(classOf[IncrementorActor]))
actorRef ! Result
expectMsg(0)
}
Using TestProbe
... with ImplicitSender
it("should increment on new messages") {
val actorRef = system
.actorOf(Props(classOf[IncrementorActor]))
actorRef ! Inc(2)
actorRef ! Result
expectMsg(2)
actorRef ! Inc(3)
actorRef ! Result
expectMsg(5)
}
Using TestProbe
expectMsg*
def expectMsg[T](d: Duration, msg: T): T
def expectMsgPF[T](d: Duration)
(pf: PartialFunction[Any, T]): T
def expectMsgClass[T](d: Duration, c: Class[T]): T
def expectNoMsg(d: Duration) // blocks
Fishing
def receiveN(n: Int, d: Duration): Seq[AnyRef]
def receiveWhile[T](max: Duration, idle: Duration, n: Int)
(pf: PartialFunction[Any, T]): Seq[T]
def fishForMessage(max: Duration, hint: String)
(pf: PartialFunction[Any, Boolean]): Any
Awaits
def awaitCond(p: => Boolean, max: Duration,
interval: Duration)
def awaitAssert(a: => Any, max: Duration,
interval: Duration)
// from ScalaTest
def eventually[T](fun: => T)
(implicit config: PatienceConfig): T
Ignores
def ignoreMsg(pf: PartialFunction[AnyRef, Boolean])
def ignoreNoMsg()
Death watching
val probe = TestProbe()
probe watch target
target ! PoisonPill
probe.expectTerminated(target)
Test probes as
dependencies
class HappyParentActor(childMaker: ActorRefFactory
=> ActorRef) extends Actor {
val child: ActorRef = childMaker(context)
override def receive: Receive = {
case msg => child.forward(msg)
}
}
Event filter
class MyActor extends Actor with ActorLogging {
override def receive: Receive = {
case DoSideEffect =>
log.info("Hello World!")
}
}
Event filter
EventFilter.info(
message = "Hello World!",
occurrences = 1
).intercept {
myActor ! DoSomething
}
akka.loggers = ["akka.testkit.TestEventListener"]
Supervision
class MyActor extends Actor with ActorLogging {
override def supervisorStrategy: Unit =
OneForOneStrategy() {
case _: FatalException =>
SupervisorStrategy.Escalate
case _: ShitHappensException =>
SupervisorStrategy.Restart
}
}
Supervision
val actorRef = TestActorRef[MyActor](MyActor.props())
val pf = actorRef.underlyingActor
.supervisorStrategy.decider
pf(new FatalException()) should be (Escalate)
pf(new ShitHappensException()) should be (Restart)
• Tests;
• Better tests;
• Problem-less tests.
TestBase
class MyActorTest
extends TestKit(ActorSystem("test-system"))
with FunSpecLike {
override protected def afterAll(): Unit = {
super.afterAll()
system.shutdown()
system.awaitTermination()
}
}
TestBase
class MyActorTest extends TestKit(ActorSystem("my-
system"))
with AkkaTestBase {
...
}
trait AkkaTestBase
extends BeforeAndAfterAll
with FunSpecLike { this: TestKit with Suite =>
override protected def afterAll() {
super.afterAll()
system.shutdown()
system.awaitTermination()
}
}
TestBase: v2
class MyActorTest extends AkkaTestBase {
...
}
abstract class AkkaTestBase
extends TestKit(ActorSystem("test-system"))
with FunSpecLike
with BeforeAndAfterAll {
override protected def afterAll() {
super.afterAll()
system.shutdown()
}
}
Timeouts
akka.test.single-expect-default = 3 seconds
akka.test.timefactor = 10
Settings extension
class Settings(...) extends Extension {
object Jdbc {
val Driver = config.getString("app.jdbc.driver")
val Url = config.getString("app.jdbc.url")
}
}
Settings extension
class MyActor extends Actor {
val settings = Settings(context.system)
val connection = client.connect(
settings.Jdbc.Driver,
settings.Jdbc.Url
)
}
Settings extension
val config = ConfigFactory.parseString("""
app.jdbc.driver = "org.h2.Driver"
app.jdbc.url = "jdbc:h2:mem:repository"
""")
val system = ActorSystem("testsystem", config)
Dynamic actors
case class Identify(messageId: Any)
case class ActorIdentity(
correlationId: Any,
ref: Option[ActorRef]
)
• Continuous delivery;
• No dedicated QA engineers;
• 500+ Jenkins jobs.
We depend on tests
• Tests;
• Better tests;
• Problem-less tests.
Be careful with mocking.
Prefer checking messages over checking side-effects.
Single responsibility principle.
Run your tests on slow VM and different OS.
Extract *all* timeouts into conf files. So that you can easily
override them on Jenkins.
Don’t hesitate to rewrite test.
Don't hesitate to rewrite application code.
Don’t trust assertion errors, check logs.
Base your decisions on historical data.
Be humane and spread the word.
Questions?
github:mkotsur/akka-smart-testing

Weitere ähnliche Inhalte

Was ist angesagt?

So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?Laura M. Castro
 
Describe's Full of It's
Describe's Full of It'sDescribe's Full of It's
Describe's Full of It'sJim Lynch
 
JUnit & Mockito, first steps
JUnit & Mockito, first stepsJUnit & Mockito, first steps
JUnit & Mockito, first stepsRenato Primavera
 
unittest in 5 minutes
unittest in 5 minutesunittest in 5 minutes
unittest in 5 minutesRay Toal
 
Implementing a decorator for thread synchronisation.
Implementing a decorator for thread synchronisation.Implementing a decorator for thread synchronisation.
Implementing a decorator for thread synchronisation.Graham Dumpleton
 
Test-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS ApplicationsTest-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS ApplicationsFITC
 
Unit testing with Spock Framework
Unit testing with Spock FrameworkUnit testing with Spock Framework
Unit testing with Spock FrameworkEugene Dvorkin
 
Testing in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkTesting in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkArulalan T
 
Intro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJSIntro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJSJim Lynch
 
Test Driven Development With Python
Test Driven Development With PythonTest Driven Development With Python
Test Driven Development With PythonSiddhi
 
Google mock for dummies
Google mock for dummiesGoogle mock for dummies
Google mock for dummiesHarry Potter
 
Smarter Testing With Spock
Smarter Testing With SpockSmarter Testing With Spock
Smarter Testing With SpockIT Weekend
 
AngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and JasmineAngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and Jasminefoxp2code
 
Advanced junit and mockito
Advanced junit and mockitoAdvanced junit and mockito
Advanced junit and mockitoMathieu Carbou
 

Was ist angesagt? (20)

Python testing
Python  testingPython  testing
Python testing
 
So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?
 
Describe's Full of It's
Describe's Full of It'sDescribe's Full of It's
Describe's Full of It's
 
JUnit & Mockito, first steps
JUnit & Mockito, first stepsJUnit & Mockito, first steps
JUnit & Mockito, first steps
 
unittest in 5 minutes
unittest in 5 minutesunittest in 5 minutes
unittest in 5 minutes
 
Implementing a decorator for thread synchronisation.
Implementing a decorator for thread synchronisation.Implementing a decorator for thread synchronisation.
Implementing a decorator for thread synchronisation.
 
Test-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS ApplicationsTest-Driven Development of AngularJS Applications
Test-Driven Development of AngularJS Applications
 
Unit testing with Spock Framework
Unit testing with Spock FrameworkUnit testing with Spock Framework
Unit testing with Spock Framework
 
Testing in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkTesting in-python-and-pytest-framework
Testing in-python-and-pytest-framework
 
Scala test
Scala testScala test
Scala test
 
Intro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJSIntro to Unit Testing in AngularJS
Intro to Unit Testing in AngularJS
 
Test Driven Development With Python
Test Driven Development With PythonTest Driven Development With Python
Test Driven Development With Python
 
Pyunit
PyunitPyunit
Pyunit
 
Spock Framework
Spock FrameworkSpock Framework
Spock Framework
 
Google mock for dummies
Google mock for dummiesGoogle mock for dummies
Google mock for dummies
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Smarter Testing With Spock
Smarter Testing With SpockSmarter Testing With Spock
Smarter Testing With Spock
 
Junit
JunitJunit
Junit
 
AngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and JasmineAngularJS Unit Testing w/Karma and Jasmine
AngularJS Unit Testing w/Karma and Jasmine
 
Advanced junit and mockito
Advanced junit and mockitoAdvanced junit and mockito
Advanced junit and mockito
 

Andere mochten auch

Natalia Yemchenko on teamwork
Natalia Yemchenko on teamworkNatalia Yemchenko on teamwork
Natalia Yemchenko on teamworkFormulaS
 
CTS - ARRA (Stimulus) Overview Briefing
CTS - ARRA (Stimulus) Overview BriefingCTS - ARRA (Stimulus) Overview Briefing
CTS - ARRA (Stimulus) Overview BriefingPaula Gwyn
 
Buying Your Next Computer
Buying Your Next ComputerBuying Your Next Computer
Buying Your Next ComputerLeslie Eyton
 
Ave maria en kathedraal de gaudi
Ave maria en kathedraal de gaudiAve maria en kathedraal de gaudi
Ave maria en kathedraal de gaudiKostas Tampakis
 
РИФ 2016, Сквозная аналитика. Сложные случаи с автоматизацией бизнес-процессо...
РИФ 2016, Сквозная аналитика. Сложные случаи с автоматизацией бизнес-процессо...РИФ 2016, Сквозная аналитика. Сложные случаи с автоматизацией бизнес-процессо...
РИФ 2016, Сквозная аналитика. Сложные случаи с автоматизацией бизнес-процессо...Тарасов Константин
 
РИФ 2016, Панавто ДЦ Mercedes-Benz: что делать со сквозной аналитикой или зач...
РИФ 2016, Панавто ДЦ Mercedes-Benz: что делать со сквозной аналитикой или зач...РИФ 2016, Панавто ДЦ Mercedes-Benz: что делать со сквозной аналитикой или зач...
РИФ 2016, Панавто ДЦ Mercedes-Benz: что делать со сквозной аналитикой или зач...Тарасов Константин
 
Emerveillez vous [fr-gr] vvv
Emerveillez vous [fr-gr] vvvEmerveillez vous [fr-gr] vvv
Emerveillez vous [fr-gr] vvvKostas Tampakis
 
РИФ 2016, АНАЛИТИКА // Методика работы с Ecommerce брендом в соцсетях: от исс...
РИФ 2016, АНАЛИТИКА // Методика работы с Ecommerce брендом в соцсетях: от исс...РИФ 2016, АНАЛИТИКА // Методика работы с Ecommerce брендом в соцсетях: от исс...
РИФ 2016, АНАЛИТИКА // Методика работы с Ecommerce брендом в соцсетях: от исс...Тарасов Константин
 
Влияние маркеров на CTR в Директе. Поисковая реклама
Влияние маркеров на CTR в Директе. Поисковая рекламаВлияние маркеров на CTR в Директе. Поисковая реклама
Влияние маркеров на CTR в Директе. Поисковая рекламаТарасов Константин
 
Creating Adoption & Orphan Care Culture in Your Church
Creating Adoption & Orphan Care Culture in Your ChurchCreating Adoption & Orphan Care Culture in Your Church
Creating Adoption & Orphan Care Culture in Your ChurchAndy Lehman
 
РИФ 2016, Новинки в мобильной рекламе социальных сетей
РИФ 2016, Новинки в мобильной рекламе социальных сетейРИФ 2016, Новинки в мобильной рекламе социальных сетей
РИФ 2016, Новинки в мобильной рекламе социальных сетейТарасов Константин
 
New lifesong overview
New lifesong overviewNew lifesong overview
New lifesong overviewAndy Lehman
 
Gevelreclame
GevelreclameGevelreclame
GevelreclameRavi Bos
 
РИФ 2016, Мобильное приложение и пользователи. Сценарии продвижения и взаимод...
РИФ 2016, Мобильное приложение и пользователи. Сценарии продвижения и взаимод...РИФ 2016, Мобильное приложение и пользователи. Сценарии продвижения и взаимод...
РИФ 2016, Мобильное приложение и пользователи. Сценарии продвижения и взаимод...Тарасов Константин
 
РИФ 2016, Борьба с воровством мобильного трафика
РИФ 2016, Борьба с воровством мобильного трафикаРИФ 2016, Борьба с воровством мобильного трафика
РИФ 2016, Борьба с воровством мобильного трафикаТарасов Константин
 
РИФ 2016, Как на Лабутенах: стратегия онлайн роста в люкс-сегменте
РИФ 2016, Как на Лабутенах: стратегия онлайн роста в люкс-сегментеРИФ 2016, Как на Лабутенах: стратегия онлайн роста в люкс-сегменте
РИФ 2016, Как на Лабутенах: стратегия онлайн роста в люкс-сегментеТарасов Константин
 

Andere mochten auch (20)

Natalia Yemchenko on teamwork
Natalia Yemchenko on teamworkNatalia Yemchenko on teamwork
Natalia Yemchenko on teamwork
 
Monetize PaaS Windows Azure and Implementation Models
Monetize PaaS Windows Azure and Implementation ModelsMonetize PaaS Windows Azure and Implementation Models
Monetize PaaS Windows Azure and Implementation Models
 
CTS - ARRA (Stimulus) Overview Briefing
CTS - ARRA (Stimulus) Overview BriefingCTS - ARRA (Stimulus) Overview Briefing
CTS - ARRA (Stimulus) Overview Briefing
 
Buying Your Next Computer
Buying Your Next ComputerBuying Your Next Computer
Buying Your Next Computer
 
Ave maria en kathedraal de gaudi
Ave maria en kathedraal de gaudiAve maria en kathedraal de gaudi
Ave maria en kathedraal de gaudi
 
РИФ 2016, Сквозная аналитика. Сложные случаи с автоматизацией бизнес-процессо...
РИФ 2016, Сквозная аналитика. Сложные случаи с автоматизацией бизнес-процессо...РИФ 2016, Сквозная аналитика. Сложные случаи с автоматизацией бизнес-процессо...
РИФ 2016, Сквозная аналитика. Сложные случаи с автоматизацией бизнес-процессо...
 
РИФ 2016, Панавто ДЦ Mercedes-Benz: что делать со сквозной аналитикой или зач...
РИФ 2016, Панавто ДЦ Mercedes-Benz: что делать со сквозной аналитикой или зач...РИФ 2016, Панавто ДЦ Mercedes-Benz: что делать со сквозной аналитикой или зач...
РИФ 2016, Панавто ДЦ Mercedes-Benz: что делать со сквозной аналитикой или зач...
 
Emerveillez vous [fr-gr] vvv
Emerveillez vous [fr-gr] vvvEmerveillez vous [fr-gr] vvv
Emerveillez vous [fr-gr] vvv
 
РИФ 2016, АНАЛИТИКА // Методика работы с Ecommerce брендом в соцсетях: от исс...
РИФ 2016, АНАЛИТИКА // Методика работы с Ecommerce брендом в соцсетях: от исс...РИФ 2016, АНАЛИТИКА // Методика работы с Ecommerce брендом в соцсетях: от исс...
РИФ 2016, АНАЛИТИКА // Методика работы с Ecommerce брендом в соцсетях: от исс...
 
Влияние маркеров на CTR в Директе. Поисковая реклама
Влияние маркеров на CTR в Директе. Поисковая рекламаВлияние маркеров на CTR в Директе. Поисковая реклама
Влияние маркеров на CTR в Директе. Поисковая реклама
 
Creating Adoption & Orphan Care Culture in Your Church
Creating Adoption & Orphan Care Culture in Your ChurchCreating Adoption & Orphan Care Culture in Your Church
Creating Adoption & Orphan Care Culture in Your Church
 
РИФ 2016, Новинки в мобильной рекламе социальных сетей
РИФ 2016, Новинки в мобильной рекламе социальных сетейРИФ 2016, Новинки в мобильной рекламе социальных сетей
РИФ 2016, Новинки в мобильной рекламе социальных сетей
 
New lifesong overview
New lifesong overviewNew lifesong overview
New lifesong overview
 
Gevelreclame
GevelreclameGevelreclame
Gevelreclame
 
2009 Redwood City Vet Day
2009 Redwood City Vet Day2009 Redwood City Vet Day
2009 Redwood City Vet Day
 
Defense
DefenseDefense
Defense
 
РИФ 2016, Мобильное приложение и пользователи. Сценарии продвижения и взаимод...
РИФ 2016, Мобильное приложение и пользователи. Сценарии продвижения и взаимод...РИФ 2016, Мобильное приложение и пользователи. Сценарии продвижения и взаимод...
РИФ 2016, Мобильное приложение и пользователи. Сценарии продвижения и взаимод...
 
Gone in 60 seconds sofia
Gone in 60 seconds   sofiaGone in 60 seconds   sofia
Gone in 60 seconds sofia
 
РИФ 2016, Борьба с воровством мобильного трафика
РИФ 2016, Борьба с воровством мобильного трафикаРИФ 2016, Борьба с воровством мобильного трафика
РИФ 2016, Борьба с воровством мобильного трафика
 
РИФ 2016, Как на Лабутенах: стратегия онлайн роста в люкс-сегменте
РИФ 2016, Как на Лабутенах: стратегия онлайн роста в люкс-сегментеРИФ 2016, Как на Лабутенах: стратегия онлайн роста в люкс-сегменте
РИФ 2016, Как на Лабутенах: стратегия онлайн роста в люкс-сегменте
 

Ähnlich wie Not only messages - smart testing for Akka actors

Beyond xUnit example-based testing: property-based testing with ScalaCheck
Beyond xUnit example-based testing: property-based testing with ScalaCheckBeyond xUnit example-based testing: property-based testing with ScalaCheck
Beyond xUnit example-based testing: property-based testing with ScalaCheckFranklin Chen
 
Test in action week 2
Test in action   week 2Test in action   week 2
Test in action week 2Yi-Huan Chan
 
MT_01_unittest_python.pdf
MT_01_unittest_python.pdfMT_01_unittest_python.pdf
MT_01_unittest_python.pdfHans Jones
 
Pragmatic unittestingwithj unit
Pragmatic unittestingwithj unitPragmatic unittestingwithj unit
Pragmatic unittestingwithj unitliminescence
 
We Are All Testers Now: The Testing Pyramid and Front-End Development
We Are All Testers Now: The Testing Pyramid and Front-End DevelopmentWe Are All Testers Now: The Testing Pyramid and Front-End Development
We Are All Testers Now: The Testing Pyramid and Front-End DevelopmentAll Things Open
 
Unittesting JavaScript with Evidence
Unittesting JavaScript with EvidenceUnittesting JavaScript with Evidence
Unittesting JavaScript with EvidenceTobie Langel
 
Testing for Educational Gaming and Educational Gaming for Testing
Testing for Educational Gaming and Educational Gaming for TestingTesting for Educational Gaming and Educational Gaming for Testing
Testing for Educational Gaming and Educational Gaming for TestingTao Xie
 
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMEREVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMERAndrey Karpov
 
Intro to Testing in Zope, Plone
Intro to Testing in Zope, PloneIntro to Testing in Zope, Plone
Intro to Testing in Zope, PloneQuintagroup
 
Advances in Unit Testing: Theory and Practice
Advances in Unit Testing: Theory and PracticeAdvances in Unit Testing: Theory and Practice
Advances in Unit Testing: Theory and PracticeTao Xie
 
Unit testing patterns for concurrent code
Unit testing patterns for concurrent codeUnit testing patterns for concurrent code
Unit testing patterns for concurrent codeDror Helper
 
Apex Testing and Best Practices
Apex Testing and Best PracticesApex Testing and Best Practices
Apex Testing and Best PracticesJitendra Zaa
 

Ähnlich wie Not only messages - smart testing for Akka actors (20)

Beyond xUnit example-based testing: property-based testing with ScalaCheck
Beyond xUnit example-based testing: property-based testing with ScalaCheckBeyond xUnit example-based testing: property-based testing with ScalaCheck
Beyond xUnit example-based testing: property-based testing with ScalaCheck
 
Test in action week 2
Test in action   week 2Test in action   week 2
Test in action week 2
 
MT_01_unittest_python.pdf
MT_01_unittest_python.pdfMT_01_unittest_python.pdf
MT_01_unittest_python.pdf
 
Pragmatic unittestingwithj unit
Pragmatic unittestingwithj unitPragmatic unittestingwithj unit
Pragmatic unittestingwithj unit
 
Scala test
Scala testScala test
Scala test
 
Python unit testing
Python unit testingPython unit testing
Python unit testing
 
We Are All Testers Now: The Testing Pyramid and Front-End Development
We Are All Testers Now: The Testing Pyramid and Front-End DevelopmentWe Are All Testers Now: The Testing Pyramid and Front-End Development
We Are All Testers Now: The Testing Pyramid and Front-End Development
 
Unittesting JavaScript with Evidence
Unittesting JavaScript with EvidenceUnittesting JavaScript with Evidence
Unittesting JavaScript with Evidence
 
Testing for Educational Gaming and Educational Gaming for Testing
Testing for Educational Gaming and Educational Gaming for TestingTesting for Educational Gaming and Educational Gaming for Testing
Testing for Educational Gaming and Educational Gaming for Testing
 
JUnit
JUnitJUnit
JUnit
 
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMEREVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
 
3 j unit
3 j unit3 j unit
3 j unit
 
Unit testing with JUnit
Unit testing with JUnitUnit testing with JUnit
Unit testing with JUnit
 
Intro to Testing in Zope, Plone
Intro to Testing in Zope, PloneIntro to Testing in Zope, Plone
Intro to Testing in Zope, Plone
 
Advances in Unit Testing: Theory and Practice
Advances in Unit Testing: Theory and PracticeAdvances in Unit Testing: Theory and Practice
Advances in Unit Testing: Theory and Practice
 
Unit testing patterns for concurrent code
Unit testing patterns for concurrent codeUnit testing patterns for concurrent code
Unit testing patterns for concurrent code
 
Apex Testing and Best Practices
Apex Testing and Best PracticesApex Testing and Best Practices
Apex Testing and Best Practices
 
ppopoff
ppopoffppopoff
ppopoff
 
Java custom annotations example
Java custom annotations exampleJava custom annotations example
Java custom annotations example
 
Unit testing
Unit testingUnit testing
Unit testing
 

Kürzlich hochgeladen

(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...ranjana rawat
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations120cr0395
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlysanyuktamishra911
 
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...Call Girls in Nagpur High Profile
 
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduitsrknatarajan
 
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)Suman Mia
 
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
Introduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptxIntroduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptxupamatechverse
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...roncy bisnoi
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxAsutosh Ranjan
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performancesivaprakash250
 
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escortsranjana rawat
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingrakeshbaidya232001
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Serviceranjana rawat
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)simmis5
 

Kürzlich hochgeladen (20)

(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANVI) Koregaon Park Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
 
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
The Most Attractive Pune Call Girls Budhwar Peth 8250192130 Will You Miss Thi...
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations
 
KubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghlyKubeKraft presentation @CloudNativeHooghly
KubeKraft presentation @CloudNativeHooghly
 
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...Booking open Available Pune Call Girls Koregaon Park  6297143586 Call Hot Ind...
Booking open Available Pune Call Girls Koregaon Park 6297143586 Call Hot Ind...
 
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
Call Girls in Nagpur Suman Call 7001035870 Meet With Nagpur Escorts
 
UNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular ConduitsUNIT-II FMM-Flow Through Circular Conduits
UNIT-II FMM-Flow Through Circular Conduits
 
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)Software Development Life Cycle By  Team Orange (Dept. of Pharmacy)
Software Development Life Cycle By Team Orange (Dept. of Pharmacy)
 
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(ANJALI) Dange Chowk Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
Introduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptxIntroduction and different types of Ethernet.pptx
Introduction and different types of Ethernet.pptx
 
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
Call Girls Pimpri Chinchwad Call Me 7737669865 Budget Friendly No Advance Boo...
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptx
 
UNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its PerformanceUNIT - IV - Air Compressors and its Performance
UNIT - IV - Air Compressors and its Performance
 
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
(MEERA) Dapodi Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Escorts
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writing
 
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur EscortsHigh Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
High Profile Call Girls Nagpur Meera Call 7001035870 Meet With Nagpur Escorts
 
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
(RIA) Call Girls Bhosari ( 7001035870 ) HI-Fi Pune Escorts Service
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)
 

Not only messages - smart testing for Akka actors