Ich möchte die Klassenmethode testB1Method2 meines Dienstes testen, indem ich die überschriebene Methode a1Method2 der Klasse B1 verspotte. Ich möchte in den Klassen A1 und B1 nichts ändern. Ich verwende Mockito 1.9.0 und Powermockito 1.4.12. Den folgenden Code versuche ich:
UnitTestService-Klasse:
Code: Select all
import static org.mockito.Mockito.*;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.testng.Assert;
import org.testng.annotations.Test;
public class UnitTestService {
@Mock
B1 b1;
@InjectMocks
Service service = new Service();
@Test
public void testB1Method2() throws Exception {
MockitoAnnotations.initMocks(this);
when(b1.a1Method2()).thenReturn("mockvalue");
PowerMockito.whenNew(B1.class).withArguments(Mockito.any()).thenReturn(b1);
String output = service.serviceMethod();
System.out.println("=====" + output);
Assert.assertTrue("mockvalue".equalsIgnoreCase(output), "testA1Method2 failed!");
}
}
Dienstklasse:
Code: Select all
public class Service {
public String serviceMethod() {
B1 b1 = new B1("some data");
return b1.a1Method2();
}
}
Klasse A1:
Code: Select all
public abstract class A1 {
public A1(String data) {
//doing many thing with data
}
public String a1Method1() {
return "from a1Method1";
}
public String a1Method2() {
return "from a1Method2";
}
}
B1-Klasse:
Code: Select all
public class B1 extends A1 {
public B1(String data) {
super(data);
}
@Override
public String a1Method1() {
return "a1Method1 from B1 class";
}
}
Ich führe die Klasse UnitTestService mit testNG in Eclipse aus. Und hier wird die tatsächliche Methode in Klasse B1 a1Method2 aufgerufen, während sie „=====from a1Method2“ in der Konsole ausgibt. Das heißt: Hier scheint es, dass Mockito diese Methode nicht verspotten kann.
Welche Codeänderung sollte ich in der UnitTestService-Klasse vornehmen, um Klasse B1 a1Method2 ?
Ich möchte die Klassenmethode testB1Method2 meines Dienstes testen, indem ich die überschriebene Methode a1Method2 der Klasse B1 verspotte. Ich möchte in den Klassen A1 und B1 nichts ändern. Ich verwende Mockito 1.9.0 und Powermockito 1.4.12. Den folgenden Code versuche ich:
UnitTestService-Klasse:
[code]import static org.mockito.Mockito.*;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.testng.Assert;
import org.testng.annotations.Test;
public class UnitTestService {
@Mock
B1 b1;
@InjectMocks
Service service = new Service();
@Test
public void testB1Method2() throws Exception {
MockitoAnnotations.initMocks(this);
when(b1.a1Method2()).thenReturn("mockvalue");
PowerMockito.whenNew(B1.class).withArguments(Mockito.any()).thenReturn(b1);
String output = service.serviceMethod();
System.out.println("=====" + output);
Assert.assertTrue("mockvalue".equalsIgnoreCase(output), "testA1Method2 failed!");
}
}
[/code]
Dienstklasse:
[code]public class Service {
public String serviceMethod() {
B1 b1 = new B1("some data");
return b1.a1Method2();
}
}
[/code]
Klasse A1:
[code]public abstract class A1 {
public A1(String data) {
//doing many thing with data
}
public String a1Method1() {
return "from a1Method1";
}
public String a1Method2() {
return "from a1Method2";
}
}
[/code]
B1-Klasse:
[code]public class B1 extends A1 {
public B1(String data) {
super(data);
}
@Override
public String a1Method1() {
return "a1Method1 from B1 class";
}
}
[/code]
Ich führe die Klasse UnitTestService mit testNG in Eclipse aus. Und hier wird die tatsächliche Methode in Klasse B1 a1Method2 aufgerufen, während sie „=====from a1Method2“ in der Konsole ausgibt. Das heißt: Hier scheint es, dass Mockito diese Methode nicht verspotten kann.
Welche Codeänderung sollte ich in der UnitTestService-Klasse vornehmen, um Klasse B1 a1Method2 ?