Sometimes test functional requirements are very complex, if you don't know how test your code, mock interface components, you gonna go toxic way from implements test unit cases. Hope use This project for begging write excellent codes
All Testing are working using Mockito 1.10.* dependency
Add dependencies on gradle config project file
Permission library (for request permissions at Android 5)
In CameraUnitTest testing class, declare variables:
1. A mock reference to interface View class Camera, whole be testing to make all possible workflows(coverage testing)
2. An inject mock object (not reference), Presenter class camera to initialize our workflow paths
3. An object parameterizable ArgumentCaptor class using String class for catch the response
4. An initialize method Mockito workspace run each workflow path
@RelaxedMockK
lateinit var cameraView:CameraView
lateinit var cameraPresenter:CameraPresenter
val captorString = slot<String>()// object or Callback@Before
fun preparate(){MockKAnnotations.init(this, relaxUnitFun =true)
cameraPresenter =CameraPresenter(cameraView)}
3. Build JunitTestCases
In syntexis the requirement need testing a case whose capture a picture, the realized pic is captured, visualized (display) and eliminated (remove in memory). Assuring that should be really(exactly) the same photo captured from the beginning.
Oblivious captorString allow catch the takePicture object
Same way we check that it is the same on having been loaded for viewPicture
But if remove that pic, just verificate whether the presenter is displaying a default picture by using showDefaultPicture method.
A second example, need testing save/load pic from our SharePreference class, creating saveload unit test:
@Test
fun saveLoad(){
val toSave ="save"
sharePresent.visibleForTesting(repository)
sharePresent.saveInput(toSave)
verify { shareView.clearText()}
verify { shareView.reLoadList()}`when`(repository.load()).thenReturn(toSave)
sharePresent.loadInput()
verify { shareView.loadText(capture(captorString))}
assertThat(toSave, equalTo(captorString.captured))}
4. Run JunitTestCases
First, we validate that our object value stores and if could recover, and second we validate that in our survey, this one obtaining the values storing in `repository` memory, notice that not exist a direct reference in our code of unit test
When all test cases had been coded, Go run:
5. License
by Romell DomÃnguez
Copyright 2018 Romell D.Z.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.