SlideShare a Scribd company logo
1 of 62
Download to read offline
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

More Related Content

What's hot

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
 

What's hot (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
 

Viewers also liked

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, Как на Лабутенах: стратегия онлайн роста в люкс-сегментеТарасов Константин
 

Viewers also liked (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, Как на Лабутенах: стратегия онлайн роста в люкс-сегменте
 

Similar to Be smart when testing your Akka code

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
 

Similar to Be smart when testing your Akka code (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
 

Recently uploaded

VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfJiananWang21
 
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
 
Employee leave management system project.
Employee leave management system project.Employee leave management system project.
Employee leave management system project.Kamal Acharya
 
Unit 2- Effective stress & Permeability.pdf
Unit 2- Effective stress & Permeability.pdfUnit 2- Effective stress & Permeability.pdf
Unit 2- Effective stress & Permeability.pdfRagavanV2
 
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...soginsider
 
2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projectssmsksolar
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTbhaskargani46
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Arindam Chakraborty, Ph.D., P.E. (CA, TX)
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringmulugeta48
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueBhangaleSonal
 
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Bookingroncy bisnoi
 
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
COST-EFFETIVE  and Energy Efficient BUILDINGS ptxCOST-EFFETIVE  and Energy Efficient BUILDINGS ptx
COST-EFFETIVE and Energy Efficient BUILDINGS ptxJIT KUMAR GUPTA
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapRishantSharmaFr
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdfKamal Acharya
 
Introduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaIntroduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaOmar Fathy
 
Standard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayStandard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayEpec Engineered Technologies
 
Work-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptxWork-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptxJuliansyahHarahap1
 

Recently uploaded (20)

VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Palanpur 7001035870 Whatsapp Number, 24/07 Booking
 
data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdf
 
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...
 
Employee leave management system project.
Employee leave management system project.Employee leave management system project.
Employee leave management system project.
 
Unit 2- Effective stress & Permeability.pdf
Unit 2- Effective stress & Permeability.pdfUnit 2- Effective stress & Permeability.pdf
Unit 2- Effective stress & Permeability.pdf
 
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
Hazard Identification (HAZID) vs. Hazard and Operability (HAZOP): A Comparati...
 
2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPT
 
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Netaji Nagar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
 
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
(INDIRA) Call Girl Bhosari Call Now 8617697112 Bhosari Escorts 24x7
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineering
 
Double Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torqueDouble Revolving field theory-how the rotor develops torque
Double Revolving field theory-how the rotor develops torque
 
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
 
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
COST-EFFETIVE  and Energy Efficient BUILDINGS ptxCOST-EFFETIVE  and Energy Efficient BUILDINGS ptx
COST-EFFETIVE and Energy Efficient BUILDINGS ptx
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leap
 
University management System project report..pdf
University management System project report..pdfUniversity management System project report..pdf
University management System project report..pdf
 
Introduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaIntroduction to Serverless with AWS Lambda
Introduction to Serverless with AWS Lambda
 
Standard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayStandard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power Play
 
Work-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptxWork-Permit-Receiver-in-Saudi-Aramco.pptx
Work-Permit-Receiver-in-Saudi-Aramco.pptx
 

Be smart when testing your Akka code