The purpose of this post is simply to give a hint on how to use Mockito, Spy, and JUnit 5.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | package se.tkartor.microservice.tols; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith (MockitoExtension. class ) public class MockTest { @Mock Car mockCarTWO; @Test public void noMockJustAssertTest() { Car car = new Car( "red" , 250 , new Wheels( 19 )); Assertions.assertEquals( 250 , car.maxSpeed); } /** * The purpose of this test is to show that a Mock can be created * using the API and does not have to be created using the @Mock annotation * NOTE! that creating a mock out of a class, means that it still serves * the interface/API of the original class, but NONE of the methods * will do anything nor will the return anything * The mock-instance is simply an empty shell, and hence the last * commented-out code/line is not possible, since it will return NULL */ @Test public void mockitoAPItest() { Car mockCar = Mockito.mock(Car. class ); mockCar.setColor( "blue" ); mockCar.setMaxSpeed( 100 ); Mockito.verify(mockCar).setColor( "blue" ); // Assertions.assertEquals("blue" , mockCar.getColor()); Assertions.assertNull( mockCar.getColor() ); } /** * Based on the fact that a mocked class is an empty shell * it is possible to also attach a.k.a spy on a instance * and carry out mocking this way, this is useful when you have * and instance that does everything right, except you need to * see what happens when you demand it to return a certain value * under certain cirumstances. The example below hopefully * explains this :-) */ @Test public void spyTest() { Car mockCar = Mockito.spy( new Car( "red" , 90 , new Wheels( 19 ))); mockCar.setColor( "blue" ); mockCar.setMaxSpeed( 100 ); Mockito.verify(mockCar).setColor( "blue" ); Assertions.assertEquals( "blue" , mockCar.getColor()); } /** * Nothing new, as explained above * the instance of the mocked class will be an empty shell */ @Test public void mockitoAPITest() { Car mockCar = Mockito.mock(Car. class ); Mockito.when(mockCar.getColor()).thenReturn( "green" ); mockCar.setColor( "blue" ); mockCar.setMaxSpeed( 100 ); mockCar.setWheels( new Wheels( 19 )); // this is possible since the api signature is there and hence the mock // allows it to be called, but it does not do anything Mockito.verify(mockCar).setColor( "blue" ); Assertions.assertEquals( "green" , mockCar.getColor()); Assertions.assertNull(mockCar.getWheels()); // This is null, since there is no mock for it } /** * The purpose with this test was simply * to use the @Mock annotation insead of the * mockito API, a somewhat lightweight / easy to read approach */ @Test public void mockitoAnnotationTest() { Mockito.when(mockCarTWO.getColor()).thenReturn( "green" ); Assertions.assertEquals( "green" , mockCarTWO.getColor()); } public static class Wheels { private int size; public Wheels( int size) { this .size = size; } public int getSize() { return size; } public void setSize( int size) { this .size = size; } } public static class Car { private String color; private long maxSpeed; private Wheels wheels; public Car(String color, long maxSpeed, Wheels wheels) { this .color = color; this .maxSpeed = maxSpeed; this .wheels = wheels; } public int wheelSize() { return wheels.getSize(); } public String getColor() { return color; } public void setColor(String color) { this .color = color; } public long getMaxSpeed() { return maxSpeed; } public void setMaxSpeed( long maxSpeed) { this .maxSpeed = maxSpeed; } public Wheels getWheels() { return wheels; } public void setWheels(Wheels wheels) { this .wheels = wheels; } } } |
For anyone who hopes to find valuable information on that topic, right here is the perfect blog I would highly recommend. Feel free to visit my site UY8 for additional resources about Thai-Massage.
Great job site admin! You have made it look so easy talking about that topic, providing your readers some vital information. I would love to see more helpful articles like this, so please keep posting! I also have great posts about Thai-Massage, check out my weblog at UY6