package com.alibaba.dubbo.rpc.cluster.support.wrapper; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import com.alibaba.dubbo.common.Constants; import com.alibaba.dubbo.common.URL; import com.alibaba.dubbo.common.extension.ExtensionLoader; import com.alibaba.dubbo.rpc.Invocation; import com.alibaba.dubbo.rpc.Invoker; import com.alibaba.dubbo.rpc.Protocol; import com.alibaba.dubbo.rpc.ProxyFactory; import com.alibaba.dubbo.rpc.Result; import com.alibaba.dubbo.rpc.RpcException; import com.alibaba.dubbo.rpc.RpcInvocation; import com.alibaba.dubbo.rpc.cluster.Directory; import com.alibaba.dubbo.rpc.cluster.LoadBalance; import com.alibaba.dubbo.rpc.cluster.directory.StaticDirectory; import com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker; import com.alibaba.dubbo.rpc.support.MockProtocol; public class MockClusterInvokerTest { List<Invoker<IHelloService>> invokers = new ArrayList<Invoker<IHelloService>>(); @Before public void beforeMethod(){ invokers.clear(); } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerInvoke_normal(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()); url = url.addParameter(Constants.MOCK_KEY, "fail" ); Invoker<IHelloService> cluster = getClusterInvoker(url); URL mockUrl = URL.valueOf("mock://localhost/"+IHelloService.class.getName() +"?getSomething.mock=return aa"); Protocol protocol = new MockProtocol(); Invoker<IHelloService> mInvoker1 = protocol.refer(IHelloService.class, mockUrl); invokers.add(mInvoker1); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("something", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("sayHello"); ret = cluster.invoke(invocation); Assert.assertEquals(null, ret.getValue()); } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerInvoke_failmock(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter(Constants.MOCK_KEY, "fail:return null" ) .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); URL mockUrl = URL.valueOf("mock://localhost/"+IHelloService.class.getName() +"?getSomething.mock=return aa").addParameters(url.getParameters()); Protocol protocol = new MockProtocol(); Invoker<IHelloService> mInvoker1 = protocol.refer(IHelloService.class, mockUrl); invokers.add(mInvoker1); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("aa", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething2"); ret = cluster.invoke(invocation); Assert.assertEquals(null, ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("sayHello"); ret = cluster.invoke(invocation); Assert.assertEquals(null, ret.getValue()); } /** * 测试mock策略是否正常-force-mork */ @Test public void testMockInvokerInvoke_forcemock(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()); url = url.addParameter(Constants.MOCK_KEY, "force:return null" ); Invoker<IHelloService> cluster = getClusterInvoker(url); URL mockUrl = URL.valueOf("mock://localhost/"+IHelloService.class.getName() +"?getSomething.mock=return aa&getSomething3xx.mock=return xx") .addParameters(url.getParameters()); Protocol protocol = new MockProtocol(); Invoker<IHelloService> mInvoker1 = protocol.refer(IHelloService.class, mockUrl); invokers.add(mInvoker1); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("aa", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething2"); ret = cluster.invoke(invocation); Assert.assertEquals(null, ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("sayHello"); ret = cluster.invoke(invocation); Assert.assertEquals(null, ret.getValue()); } @Test public void testMockInvokerInvoke_forcemock_defaultreturn(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()); url = url.addParameter(Constants.MOCK_KEY, "force" ); Invoker<IHelloService> cluster = getClusterInvoker(url); URL mockUrl = URL.valueOf("mock://localhost/"+IHelloService.class.getName() +"?getSomething.mock=return aa&getSomething3xx.mock=return xx&sayHello.mock=return ") .addParameters(url.getParameters()); Protocol protocol = new MockProtocol(); Invoker<IHelloService> mInvoker1 = protocol.refer(IHelloService.class, mockUrl); invokers.add(mInvoker1); RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("sayHello"); Result ret = cluster.invoke(invocation); Assert.assertEquals(null, ret.getValue()); } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerFromOverride_Invoke_Fock_someMethods(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getSomething.mock","fail:return x") .addParameter("getSomething2.mock","force:return y"); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("something", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething2"); ret = cluster.invoke(invocation); Assert.assertEquals("y", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething3"); ret = cluster.invoke(invocation); Assert.assertEquals("something3", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("sayHello"); ret = cluster.invoke(invocation); Assert.assertEquals(null, ret.getValue()); } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerFromOverride_Invoke_Fock_WithOutDefault(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getSomething.mock","fail:return x") .addParameter("getSomething2.mock","force:return y") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("x", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething2"); ret = cluster.invoke(invocation); Assert.assertEquals("y", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething3"); try { ret = cluster.invoke(invocation); Assert.fail(); }catch (RpcException e) { } } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerFromOverride_Invoke_Fock_WithDefault(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("mock","fail:return null") .addParameter("getSomething.mock","fail:return x") .addParameter("getSomething2.mock","force:return y") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("x", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething2"); ret = cluster.invoke(invocation); Assert.assertEquals("y", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething3"); ret = cluster.invoke(invocation); Assert.assertEquals(null, ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("sayHello"); ret = cluster.invoke(invocation); Assert.assertEquals(null, ret.getValue()); } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerFromOverride_Invoke_Fock_WithFailDefault(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("mock","fail:return z") .addParameter("getSomething.mock","fail:return x") .addParameter("getSomething2.mock","force:return y") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("x", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething2"); ret = cluster.invoke(invocation); Assert.assertEquals("y", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething3"); ret = cluster.invoke(invocation); Assert.assertEquals("z", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("sayHello"); ret = cluster.invoke(invocation); Assert.assertEquals("z", ret.getValue()); } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerFromOverride_Invoke_Fock_WithForceDefault(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("mock","force:return z") .addParameter("getSomething.mock","fail:return x") .addParameter("getSomething2.mock","force:return y") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("x", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething2"); ret = cluster.invoke(invocation); Assert.assertEquals("y", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething3"); ret = cluster.invoke(invocation); Assert.assertEquals("z", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("sayHello"); ret = cluster.invoke(invocation); Assert.assertEquals("z", ret.getValue()); } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerFromOverride_Invoke_Fock_Default(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("mock","fail:return x") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("x", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething2"); ret = cluster.invoke(invocation); Assert.assertEquals("x", ret.getValue()); //如d //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("sayHello"); ret = cluster.invoke(invocation); Assert.assertEquals("x", ret.getValue()); } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerFromOverride_Invoke_checkCompatible_return(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getSomething.mock","return x") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("x", ret.getValue()); //如果没有配置mock,则直接返回null invocation = new RpcInvocation(); invocation.setMethodName("getSomething3"); try{ ret = cluster.invoke(invocation); Assert.fail("fail invoke"); }catch(RpcException e){ } } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerFromOverride_Invoke_checkCompatible_ImplMock(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("mock","true") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("somethingmock", ret.getValue()); } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerFromOverride_Invoke_checkCompatible_ImplMock2(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("mock","fail") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("somethingmock", ret.getValue()); } /** * 测试mock策略是否正常-fail-mock */ @Test public void testMockInvokerFromOverride_Invoke_checkCompatible_ImplMock3(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("mock","force"); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertEquals("somethingmock", ret.getValue()); } @Test public void testMockInvokerFromOverride_Invoke_check_String(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getSomething.mock","force:return 1688") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getSomething"); Result ret = cluster.invoke(invocation); Assert.assertTrue("result type must be String but was : " + ret.getValue().getClass(), ret.getValue() instanceof String); Assert.assertEquals("1688", (String)ret.getValue()); } @Test public void testMockInvokerFromOverride_Invoke_check_int(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getInt1.mock","force:return 1688") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getInt1"); Result ret = cluster.invoke(invocation); Assert.assertTrue("result type must be integer but was : " + ret.getValue().getClass(), ret.getValue() instanceof Integer); Assert.assertEquals(new Integer(1688), (Integer)ret.getValue()); } @Test public void testMockInvokerFromOverride_Invoke_check_boolean(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getBoolean1.mock","force:return true") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getBoolean1"); Result ret = cluster.invoke(invocation); Assert.assertTrue("result type must be Boolean but was : " + ret.getValue().getClass(), ret.getValue() instanceof Boolean); Assert.assertEquals(true, Boolean.parseBoolean(ret.getValue().toString())); } @Test public void testMockInvokerFromOverride_Invoke_check_Boolean(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getBoolean2.mock","force:return true") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getBoolean2"); Result ret = cluster.invoke(invocation); Assert.assertEquals(true, Boolean.parseBoolean(ret.getValue().toString())); } @SuppressWarnings("unchecked") @Test public void testMockInvokerFromOverride_Invoke_check_ListString_empty(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getListString.mock","force:return empty") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getListString"); Result ret = cluster.invoke(invocation); Assert.assertEquals(0, ((List<String>)ret.getValue()).size()); } @SuppressWarnings("unchecked") @Test public void testMockInvokerFromOverride_Invoke_check_ListString(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getListString.mock","force:return [\"hi\",\"hi2\"]") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getListString"); Result ret = cluster.invoke(invocation); List<String> rl = (List<String>)ret.getValue(); Assert.assertEquals(2, rl.size()); Assert.assertEquals("hi", rl.get(0)); } @SuppressWarnings("unchecked") @Test public void testMockInvokerFromOverride_Invoke_check_ListPojo_empty(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getUsers.mock","force:return empty") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getUsers"); Result ret = cluster.invoke(invocation); Assert.assertEquals(0, ((List<User>)ret.getValue()).size()); } @SuppressWarnings("unchecked") @Test public void testMockInvokerFromOverride_Invoke_check_ListPojo(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getUsers.mock","force:return [{id:1, name:\"hi1\"}, {id:2, name:\"hi2\"}]") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getUsers"); Result ret = cluster.invoke(invocation); List<User> rl = (List<User>)ret.getValue(); System.out.println(rl); Assert.assertEquals(2, rl.size()); Assert.assertEquals("hi1", ((User)rl.get(0)).getName()); } @Test public void testMockInvokerFromOverride_Invoke_check_ListPojo_error(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getUsers.mock","force:return [{id:x, name:\"hi1\"}]") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getUsers"); try{ cluster.invoke(invocation); }catch (RpcException e) { } } @Test public void testMockInvokerFromOverride_Invoke_force_throw(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getBoolean2.mock","force:throw ") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getBoolean2"); try { cluster.invoke(invocation); Assert.fail(); } catch (RpcException e) { Assert.assertFalse("not custem exception", e.isBiz()); } } @Test public void testMockInvokerFromOverride_Invoke_force_throwCustemException() throws Throwable{ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getBoolean2.mock","force:throw com.alibaba.dubbo.rpc.cluster.support.wrapper.MyMockException") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getBoolean2"); try { cluster.invoke(invocation).recreate(); Assert.fail(); } catch (MyMockException e) { } } @Test public void testMockInvokerFromOverride_Invoke_force_throwCustemExceptionNotFound(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("getBoolean2.mock","force:throw java.lang.RuntimeException2") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getBoolean2"); try { cluster.invoke(invocation); Assert.fail(); } catch (Exception e) { Assert.assertTrue(e.getCause() instanceof IllegalStateException); } } @Test public void testMockInvokerFromOverride_Invoke_mock_false(){ URL url = URL.valueOf("remote://1.2.3.4/"+IHelloService.class.getName()) .addParameter("mock","false") .addParameter("invoke_return_error", "true" ); Invoker<IHelloService> cluster = getClusterInvoker(url); //方法配置了mock RpcInvocation invocation = new RpcInvocation(); invocation.setMethodName("getBoolean2"); try { cluster.invoke(invocation); Assert.fail(); } catch (RpcException e) { Assert.assertTrue(e.isTimeout()); } } @SuppressWarnings({ "unchecked", "rawtypes" }) private Invoker<IHelloService> getClusterInvoker(URL url){ //javasssit方式对方法参数类型判断严格,如果invocation数据设置不全,调用会失败. final URL durl = url.addParameter("proxy", "jdk"); invokers.clear(); ProxyFactory proxy = ExtensionLoader.getExtensionLoader(ProxyFactory.class).getExtension("jdk"); Invoker<IHelloService> invoker1 = proxy.getInvoker(new HelloService(), IHelloService.class, durl); invokers.add(invoker1); Directory<IHelloService> dic = new StaticDirectory<IHelloService>(durl, invokers, null); AbstractClusterInvoker<IHelloService> cluster = new AbstractClusterInvoker(dic) { @Override protected Result doInvoke(Invocation invocation, List invokers, LoadBalance loadbalance) throws RpcException { if (durl.getParameter("invoke_return_error", false)){ throw new RpcException(RpcException.TIMEOUT_EXCEPTION, "test rpc exception"); } else { return ((Invoker<?>)invokers.get(0)).invoke(invocation); } } }; return new MockClusterInvoker<IHelloService>(dic, cluster); } public static interface IHelloService{ String getSomething(); String getSomething2(); String getSomething3(); int getInt1(); boolean getBoolean1(); Boolean getBoolean2(); public List<String> getListString(); public List<User> getUsers(); void sayHello(); } public static class HelloService implements IHelloService { public String getSomething() { return "something"; } public String getSomething2() { return "something2"; } public String getSomething3() { return "something3"; } public int getInt1() { return 1; } public boolean getBoolean1() { return false; } public Boolean getBoolean2() { return Boolean.FALSE; } public List<String> getListString() { return Arrays.asList(new String[]{"Tom","Jerry"}); } public List<User> getUsers() { return Arrays.asList(new User[]{new User(1,"Tom"),new User(2,"Jerry")}); } public void sayHello() { System.out.println("hello prety"); } } public static class IHelloServiceMock implements IHelloService { public IHelloServiceMock() { } public String getSomething() { return "somethingmock"; } public String getSomething2() { return "something2mock"; } public String getSomething3() { return "something3mock"; } public List<String> getListString() { return Arrays.asList(new String[]{"Tommock","Jerrymock"}); } public List<User> getUsers() { return Arrays.asList(new User[]{new User(1,"Tommock"),new User(2,"Jerrymock")}); } public int getInt1() { return 1; } public boolean getBoolean1() { return false; } public Boolean getBoolean2() { return Boolean.FALSE; } public void sayHello() { System.out.println("hello prety"); } } public static class User{ private int id; private String name; public User() { } public User(int id, String name) { super(); this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } } }