Added UnitTest cases for adapter.
This commit is contained in:
@ -14,5 +14,10 @@
|
|||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-core</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@ -1,30 +1,28 @@
|
|||||||
package com.iluwatar.adapter;
|
package com.iluwatar.adapter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* An adapter helps two incompatible interfaces to work together. This is the real world definition
|
* An adapter helps two incompatible interfaces to work together. This is the real world definition
|
||||||
* for an adapter. Interfaces may be incompatible but the inner functionality should suit the need.
|
* for an adapter. Interfaces may be incompatible but the inner functionality should suit the need.
|
||||||
* The Adapter design pattern allows otherwise incompatible classes to work together by converting
|
* The Adapter design pattern allows otherwise incompatible classes to work together by converting
|
||||||
* the interface of one class into an interface expected by the clients.
|
* the interface of one class into an interface expected by the clients.
|
||||||
* <p>
|
*
|
||||||
* There are two variations of the Adapter pattern: The class adapter implements the adaptee's
|
* <p>There are two variations of the Adapter pattern: The class adapter implements the adaptee's
|
||||||
* interface whereas the object adapter uses composition to contain the adaptee in the adapter
|
* interface whereas the object adapter uses composition to contain the adaptee in the adapter
|
||||||
* object. This example uses the object adapter approach.
|
* object. This example uses the object adapter approach.
|
||||||
* <p>
|
*
|
||||||
* The Adapter ({@link GnomeEngineer}) converts the interface of the target class (
|
* <p>The Adapter ({@link GnomeEngineer}) converts the interface of the target class (
|
||||||
* {@link GoblinGlider}) into a suitable one expected by the client ({@link GnomeEngineeringManager}
|
* {@link GoblinGlider}) into a suitable one expected by the client ({@link GnomeEngineeringManager}
|
||||||
* ).
|
* ).
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class App {
|
public class App {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Program entry point
|
* Program entry point.
|
||||||
*
|
*
|
||||||
* @param args command line args
|
* @param args command line args
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
Engineer manager = new GnomeEngineeringManager();
|
Engineer manager = new GnomeEngineeringManager(new GnomeEngineer());
|
||||||
manager.operateDevice();
|
manager.operateDevice();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,26 @@
|
|||||||
package com.iluwatar.adapter;
|
package com.iluwatar.adapter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* GnomeEngineering manager uses {@link Engineer} to operate devices.
|
* GnomeEngineering manager uses {@link Engineer} to operate devices.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class GnomeEngineeringManager implements Engineer {
|
public class GnomeEngineeringManager implements Engineer {
|
||||||
|
|
||||||
private Engineer engineer;
|
private Engineer engineer;
|
||||||
|
|
||||||
public GnomeEngineeringManager() {
|
public GnomeEngineeringManager() {
|
||||||
engineer = new GnomeEngineer();
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public GnomeEngineeringManager(Engineer engineer) {
|
||||||
|
this.engineer = engineer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void operateDevice() {
|
public void operateDevice() {
|
||||||
engineer.operateDevice();
|
engineer.operateDevice();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setEngineer(Engineer engineer) {
|
||||||
|
this.engineer = engineer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,68 @@
|
|||||||
|
package com.iluwatar.adapter;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An adapter helps two incompatible interfaces to work together. This is the real world definition
|
||||||
|
* for an adapter. Interfaces may be incompatible but the inner functionality should suit the need.
|
||||||
|
* The Adapter design pattern allows otherwise incompatible classes to work together by converting
|
||||||
|
* the interface of one class into an interface expected by the clients.
|
||||||
|
*
|
||||||
|
* <p>There are two variations of the Adapter pattern:
|
||||||
|
* The class adapter implements the adaptee's
|
||||||
|
* interface whereas the object adapter uses composition to contain the adaptee in the adapter
|
||||||
|
* object. This example uses the object adapter approach.
|
||||||
|
*
|
||||||
|
* <p>The Adapter ({@link GnomeEngineer}) converts the interface
|
||||||
|
* of the target class ({@link GoblinGlider}) into a suitable one expected by
|
||||||
|
* the client ({@link GnomeEngineeringManager}
|
||||||
|
* ).
|
||||||
|
*/
|
||||||
|
public class AdapterPatternTest {
|
||||||
|
|
||||||
|
private Map<String, Object> beans;
|
||||||
|
|
||||||
|
private static final String ENGINEER_BEAN = "engineer";
|
||||||
|
|
||||||
|
private static final String MANAGER_BEAN = "manager";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method runs before the test execution and sets the bean objects in the beans Map.
|
||||||
|
*/
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
beans = new HashMap<>();
|
||||||
|
|
||||||
|
GnomeEngineer gnomeEngineer = spy(new GnomeEngineer());
|
||||||
|
beans.put(ENGINEER_BEAN, gnomeEngineer);
|
||||||
|
|
||||||
|
GnomeEngineeringManager manager = new GnomeEngineeringManager();
|
||||||
|
manager.setEngineer((GnomeEngineer) beans.get(ENGINEER_BEAN));
|
||||||
|
beans.put(MANAGER_BEAN, manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This test asserts that when we call operateDevice() method on a manager bean, it is internally
|
||||||
|
* calling operateDevice method on the engineer object. The Adapter ({@link GnomeEngineer})
|
||||||
|
* converts the interface of the target class ( {@link GoblinGlider}) into a suitable one expected
|
||||||
|
* by the client ({@link GnomeEngineeringManager} ).
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testAdapter() {
|
||||||
|
Engineer manager = (Engineer) beans.get(MANAGER_BEAN);
|
||||||
|
|
||||||
|
// when manager is asked to operate device
|
||||||
|
manager.operateDevice();
|
||||||
|
|
||||||
|
// Manager internally calls the engineer object to operateDevice
|
||||||
|
Engineer engineer = (Engineer) beans.get(ENGINEER_BEAN);
|
||||||
|
verify(engineer).operateDevice();
|
||||||
|
}
|
||||||
|
}
|
@ -1,19 +0,0 @@
|
|||||||
package com.iluwatar.adapter;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import com.iluwatar.adapter.App;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Application test
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class AppTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
String[] args = {};
|
|
||||||
App.main(args);
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user