Testing data classes in Kotlin
As we all know, data classes are final by default on Kotlin and if you try to use Mockito and mock such a class, you will get an exception. What you need to do is add this file:
Continue reading “Tricky parts when implementing unit tests for Android in Kotlin”
Running unit tests for ViewModels on Android where you have LiveData objects can be tricky. It is very possible that you get this exception:
java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked.
Continue reading “Running unit tests for LiveData with Jupiter on Android”
I recently had a very strange bug when it comes to using a BehaviorSubject inside the object that I am testing.
Continue reading “Race conditions in unit tests with RxJava when using TestScheduler”
In Android we decided that we want to implement a unit test performance monitor. The reason for it is that sometimes some unit tests would execute in more than 1 second and it was all because we would use the Schedulers.trampoline() RxJava scheduler instead of the TestScheduler which is part of the RX package.
Continue reading “Creating a SonarQube custom plugin for Kotlin”
What is a spec
There was a time where I saw some tests which my colleagues made where the file name in the test folder would be: “users.spec.coffee”. So “spec” is short of specification and it is a totally different way of how we think about tests.
Continue reading “The difference between a spec and a test (Behaviour Driven Development)”
Sometimes, when I mock a method in Mockito, I used anyString instead of any and I get into a mess and my test fails. Why?
given(mUserRepo.getUser(anyString(). any())).willReturn(new User());
And what will happen if
UserRepo is called with null? Well, the matcher doesn’t work and the test fails. anyString() does not work with null values. If you pass null to a mocked service then use any() as a matcher.
Probably, most of you already know this, but it is good to keep it in mind when you want to dynamically change the values returned by a mock you have.
Continue reading “How to mock a dynamic value returned from a method with Mockito?”
According to this issue, Mockito cannot capture var-args still.
There is a very easy way to verify a method has been called with the right parameter in Mockito. All you need to do is use captors, to capture the actual argument. Here is how you can use them:
ArgumentCaptor argument = ArgumentCaptor.forClass(RuleEntity.class);
Simple it is, just a quick reminder for starters.