Best Easymock code snippet using org.easymock.internal.ClassProxyFactory.MockMethodInterceptor
Source:ClassProxyFactory.java
...43 *44 * @author Henri Tremblay45 */46public class ClassProxyFactory implements IProxyFactory {47 public static class MockMethodInterceptor implements MethodInterceptor, Serializable {48 private static final long serialVersionUID = -9054190871232972342L;49 private final InvocationHandler handler;50 private transient Set<Method> mockedMethods;51 public MockMethodInterceptor(InvocationHandler handler) {52 this.handler = handler;53 }54 public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy)55 throws Throwable {56 // We conveniently mock abstract methods be default57 if (Modifier.isAbstract(method.getModifiers())) {58 return handler.invoke(obj, method, args);59 }60 // Here I need to check if the fillInStackTrace was called by EasyMock inner code61 // If it's the case, just ignore the call. We ignore it for two reasons62 // 1- In Java 7, the fillInStackTrace won't work because, since no constructor was called, the stackTrace attribute is null63 // 2- There might be some unexpected side effect in the original fillInStackTrace. So it seems more logical to ignore the call64 if (obj instanceof Throwable && method.getName().equals("fillInStackTrace")) {65 if(isCallerMockInvocationHandlerInvoke(new Throwable())) {66 return obj;67 }68 }69 // Bridges should delegate to their bridged method. It should be done before70 // checking for mocked methods because only unbridged method are mocked71 // It also make sure the method passed to the handler is not the bridge. Normally it72 // shouldn't be necessary because bridges are never mocked so are never in the mockedMethods73 // map. So the normal case is that is will call invokeSuper which will call the interceptor for74 // the bridged method. The problem is that it doesn't happen. It looks like a cglib bug. For75 // package scoped bridges (see GenericTest), the interceptor is not called for the bridged76 // method. Not normal from my point of view.77 if (method.isBridge()) {78 method = BridgeMethodResolver.findBridgedMethod(method);79 }80 if (mockedMethods != null && !mockedMethods.contains(method)) {81 return proxy.invokeSuper(obj, args);82 }83 return handler.invoke(obj, method, args);84 }85 public void setMockedMethods(Method... mockedMethods) {86 this.mockedMethods = new HashSet<>(Arrays.asList(mockedMethods));87 }88 @SuppressWarnings("unchecked")89 private void readObject(java.io.ObjectInputStream stream) throws IOException,90 ClassNotFoundException {91 stream.defaultReadObject();92 Set<MethodSerializationWrapper> methods = (Set<MethodSerializationWrapper>) stream93 .readObject();94 if (methods == null) {95 return;96 }97 mockedMethods = new HashSet<>(methods.size());98 for (MethodSerializationWrapper m : methods) {99 try {100 mockedMethods.add(m.getMethod());101 } catch (NoSuchMethodException e) {102 // ///CLOVER:OFF103 throw new IOException(e.toString());104 // ///CLOVER:ON105 }106 }107 }108 private void writeObject(java.io.ObjectOutputStream stream) throws IOException {109 stream.defaultWriteObject();110 if (mockedMethods == null) {111 stream.writeObject(null);112 return;113 }114 Set<MethodSerializationWrapper> methods = new HashSet<>(115 mockedMethods.size());116 for (Method m : mockedMethods) {117 methods.add(new MethodSerializationWrapper(m));118 }119 stream.writeObject(methods);120 }121 }122 // ///CLOVER:OFF (I don't know how to test it automatically yet)123 private static final NamingPolicy ALLOWS_MOCKING_CLASSES_IN_SIGNED_PACKAGES = new DefaultNamingPolicy() {124 @Override125 public String getClassName(String prefix, String source, Object key,126 Predicate names) {127 return "codegen." + super.getClassName(prefix, source, key, names);128 }129 };130 // ///CLOVER:ON131 public static boolean isCallerMockInvocationHandlerInvoke(Throwable e) {132 StackTraceElement[] elements = e.getStackTrace();133 return elements.length > 2134 && elements[2].getClassName().equals(MockInvocationHandler.class.getName())135 && elements[2].getMethodName().equals("invoke");136 }137 @SuppressWarnings("unchecked")138 public <T> T createProxy(final Class<T> toMock, InvocationHandler handler,139 Method[] mockedMethods, ConstructorArgs args) {140 Enhancer enhancer = createEnhancer(toMock);141 MockMethodInterceptor interceptor = new MockMethodInterceptor(handler);142 if (mockedMethods != null) {143 interceptor.setMockedMethods(mockedMethods);144 }145 enhancer.setCallbackType(interceptor.getClass());146 Class<?> mockClass;147 try {148 mockClass = enhancer.createClass();149 } catch (CodeGenerationException e) {150 // ///CLOVER:OFF (don't know how to test it automatically)151 // Probably caused by a NoClassDefFoundError, to use two class loaders at the same time152 // instead of the default one (which is the class to mock one)153 // This is required by Eclipse Plug-ins, the mock class loader doesn't see154 // cglib most of the time. Using EasyMock and the mock class loader at the same time solves this155 LinkedClassLoader linkedClassLoader = AccessController.doPrivileged((PrivilegedAction<LinkedClassLoader>) () -> new LinkedClassLoader(toMock.getClassLoader(), ClassProxyFactory.class.getClassLoader()));156 enhancer.setClassLoader(linkedClassLoader);157 mockClass = enhancer.createClass();158 // ///CLOVER:ON159 }160 Factory mock;161 if (args != null) {162 // Really instantiate the class163 Constructor<?> cstr;164 try {165 // Get the constructor with the same params166 cstr = mockClass.getDeclaredConstructor(args.getConstructor().getParameterTypes());167 } catch (NoSuchMethodException e) {168 // Shouldn't happen, constructor is checked when ConstructorArgs is instantiated169 // ///CLOVER:OFF170 throw new RuntimeException("Fail to find constructor for param types", e);171 // ///CLOVER:ON172 }173 try {174 cstr.setAccessible(true); // So we can call a protected175 // constructor176 mock = (Factory) cstr.newInstance(args.getInitArgs());177 } catch (InstantiationException | IllegalAccessException e) {178 // ///CLOVER:OFF179 throw new RuntimeException("Failed to instantiate mock calling constructor", e);180 // ///CLOVER:ON181 } catch (InvocationTargetException e) {182 throw new RuntimeException(183 "Failed to instantiate mock calling constructor: Exception in constructor",184 e.getTargetException());185 }186 } else {187 // Do not call any constructor188 try {189 mock = (Factory) ClassInstantiatorFactory.getInstantiator().newInstance(mockClass);190 } catch (InstantiationException e) {191 // ///CLOVER:OFF192 throw new RuntimeException("Fail to instantiate mock for " + toMock + " on "193 + ClassInstantiatorFactory.getJVM() + " JVM");194 // ///CLOVER:ON195 }196 }197 mock.setCallback(0, interceptor);198 return (T) mock;199 }200 private Enhancer createEnhancer(Class<?> toMock) {201 // Create the mock202 Enhancer enhancer = new Enhancer() {203 /**204 * Filter all private constructors but do not check that there are205 * some left206 */207 @SuppressWarnings("rawtypes")208 @Override209 protected void filterConstructors(Class sc, List constructors) {210 CollectionUtils.filter(constructors, new VisibilityPredicate(sc, true));211 }212 };213 enhancer.setSuperclass(toMock);214 // ///CLOVER:OFF (I don't know how to test it automatically yet)215 // See issue ID: 2994002216 if (toMock.getSigners() != null) {217 enhancer.setNamingPolicy(ALLOWS_MOCKING_CLASSES_IN_SIGNED_PACKAGES);218 }219 // ///CLOVER:ON220 return enhancer;221 }222 public InvocationHandler getInvocationHandler(Object mock) {223 Factory factory = (Factory) mock;224 return ((MockMethodInterceptor) factory.getCallback(0)).handler;225 }226}...
Source:EasierMocks.java
...20import org.easymock.cglib.proxy.Callback;21import org.easymock.cglib.proxy.Factory;22import org.easymock.cglib.proxy.MethodInterceptor;23import org.easymock.cglib.proxy.MethodProxy;24import org.easymock.internal.ClassProxyFactory.MockMethodInterceptor;25import java.lang.annotation.Annotation;26import java.lang.reflect.Field;27import java.lang.reflect.InvocationHandler;28import java.lang.reflect.Method;29import java.util.ArrayList;30import java.util.List;31/**32 * Automates creation and checking of mock objects. Normal usage is as follows:33 * <ol>34 * <li>Annotate one or more fields with {@link Mock}35 * <li>Call {@link #prepareMocks(Object)} in the constructor of the test class, and pass 'this' as36 * the argument37 * <li>Call {@link #reset()} in the @Before method for the test class.38 * <li>Call {@link #verify()} in the @After method for the test class.39 * <li>In the test method itself, set expectations then call {@link #replay()}, followed by the40 * invocation of the method under test.41 * </ol>42 *43 * @author gheck44 */45/*46 Changes vs original Copyright (as per license requirement):47 Java 6 compatible syntax changes - Copyright Needham Software 201348 Support for Easymock 3.4+49 Support for Java 8 Default interfaces.50 */51public class EasierMocks {52 private static final ThreadLocal<List<Object>> sMocks = new ThreadLocal<>();53 private static final ThreadLocal<List<Object>> sNiceMocks = new ThreadLocal<>();54 private static final ThreadLocal<MockStates> sState = new ThreadLocal<>();55 private static final ThreadLocal<Field> sObjectUnderTest = new ThreadLocal<>();56 private EasierMocks() {57 }58 public static void prepareMocks(Object o) {59 sState.set(MockStates.AWAIT_EXPECTATIONS);60 List<Object> mockList = new ArrayList<>();61 List<Object> niceMockList = new ArrayList<>();62 sMocks.set(mockList);63 sNiceMocks.set(niceMockList);64 sObjectUnderTest.set(null);65 final List<Field> niceFields = new ArrayList<>();66 final List<Field> fields = new ArrayList<>();67 AnnotatedElementAction record = new AnnotatedElementAction() {68 @Override69 public void doTo(Field f, Annotation a) {70 recordField(niceFields, fields, f, a);71 }72 };73 AnnotationUtil.doToAnnotatedElement(o, record, Mock.class);74 for (Field f : fields) {75 try {76 Object mock = org.easymock.EasyMock.createMock(f.getType());77 if (niceFields.contains(f)) {78 mock = org.easymock.EasyMock.createNiceMock(f.getType());79 niceMockList.add(mock);80 }81 mockList.add(mock);82 f.setAccessible(true);83 f.set(o, mock);84 } catch (IllegalArgumentException | IllegalAccessException e) {85 throw new RuntimeException(e);86 }87 }88 AnnotatedElementAction prepareTestObj = new AnnotatedElementAction() {89 @Override90 public void doTo(Field f, Annotation a) {91 sObjectUnderTest.set(f);92 }93 };94 AnnotationUtil.doToAnnotatedElement(o, prepareTestObj, ObjectUnderTest.class);95 Field testObjField = sObjectUnderTest.get();96 if (testObjField != null) {97 // To prevent EasyMock from creating a java.util.Proxy for which there is no hope of invoking the parent98 // implementation of a default method, use ByteBuddy to create a concrete class first. Interface methods without99 // defaults will be abstract. This will also have the nice side effect of providing an intelligible error100 // message if it gets called in the unit test, and we wind up calling method.invoke() on it.101 Class<?> type = dynamicSubclass(testObjField.getType());102 // Now let EasyMock do its thing, which will *ALWAYS* be a cglib enhanced subclass of the above103 // dynamic implementation produced by ByteBuddy104 Factory mock = EasyMock.createMock(type);105 // try block lifted from easymock ClassExtensionHelper.getControl()106 // We need to be sure that when ClassExtensionHelper runs this and107 // gets our interceptor instead of the regular one it gets the same108 // answer.109 InvocationHandler handler;110 try {111 Field f = MockMethodInterceptor.class.getDeclaredField("handler");112 f.setAccessible(true);113 handler = (InvocationHandler) f.get(mock.getCallback(0));114 } catch (NoSuchFieldException e) {115 throw new RuntimeException("crap handler field changed (probably means you tried to upgrade easymock to a version that is not yet supported)");116 } catch (IllegalAccessException e) {117 throw new RuntimeException("Something blocked us from accessing the handler field.");118 }119 // easy mock always sets one method interceptor callback. If they change that120 // this breaks...121 Interceptor customInterceptor = new Interceptor(mock.getCallback(0), handler);122 mock.setCallback(0, customInterceptor);123 mockList.add(mock);124 try {125 testObjField.setAccessible(true);126 testObjField.set(o, mock);127 } catch (IllegalArgumentException | IllegalAccessException e) {128 throw new RuntimeException(e);129 }130 }131 }132 private static Class<?> dynamicSubclass(Class<?> type1) {133 return new ByteBuddy()134 .subclass(type1)135 .make()136 .load(type1.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)137 .getLoaded();138 }139 static void recordField(List<Field> niceFields, List<Field> fields, Field f, Annotation a) {140 fields.add(f);141 if (((Mock) a).nice()) {142 niceFields.add(f);143 }144 }145 public static void reset() {146 sState.set(MockStates.AWAIT_EXPECTATIONS);147 EasyMock.resetToDefault(mocks());148 EasyMock.resetToNice(niceMocks());149 }150 public static void replay() {151 EasyMock.replay(mocks());152 sState.set(MockStates.AWAIT_METHOD_UNDER_TEST);153 }154 public static void verify() {155 EasyMock.verify(mocks());156 }157 private static Object[] mocks() {158 return sMocks.get().toArray();159 }160 private static Object[] niceMocks() {161 return sNiceMocks.get().toArray();162 }163 private static final class Interceptor extends MockMethodInterceptor {164 private static final long serialVersionUID = 1L;165 private final MethodInterceptor callback;166 Interceptor(Callback callback, InvocationHandler handler) {167 super(handler);168 this.callback = (MethodInterceptor) callback;169 }170 @Override171 public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy)172 throws Throwable {173 if (sState.get() == MockStates.AWAIT_METHOD_UNDER_TEST) {174 sState.set(MockStates.TESTING);175 return proxy.invokeSuper(obj, args);176 } else {177 return callback.intercept(obj, method, args, proxy);...
Source:FactoryMockImpl.java
...24import net.sf.cglib.proxy.Callback;25import net.sf.cglib.proxy.Factory;26import org.easymock.classextension.EasyMock;27import org.easymock.classextension.internal.ClassExtensionHelper;28import org.easymock.classextension.internal.ClassProxyFactory.MockMethodInterceptor;29/**30 * The implementation of factory mocks - mocks which needs to be created by constructing class instance by class name (e.g.31 * {@see Class#forName(String)).32 * 33 * @param <T>34 * the generic type35 */36public class FactoryMockImpl<T> implements FactoryMock<T> {37 /** The message thrown when compatibility issue of used Mockito version are detected */38 private final static String MOCKITO_COMPATIBILITY_MESSAGE = "Mockito internals has changed and this code not anymore compatible";39 /** The original class. */40 private Class<T> originalClass;41 /** The mock. */42 private T mock;43 /**44 * Instantiates a new factory mock impl.45 * 46 * @param type47 * the type48 */49 FactoryMockImpl(Class<T> type) {50 this.originalClass = type;51 initialize();52 }53 /**54 * Initialize.55 */56 private void initialize() {57 mock = EasyMock.createMock(originalClass);58 }59 /*60 * (non-Javadoc)61 * 62 * @see org.jboss.test.faces.mockito.factory.FactoryMock#getMockClass()63 */64 @SuppressWarnings("unchecked")65 public Class<T> getMockClass() {66 return (Class<T>) mock.getClass();67 }68 /*69 * (non-Javadoc)70 * 71 * @see org.jboss.test.faces.mockito.factory.FactoryMock#getMockName()72 */73 public String getMockClassName() {74 return mock.getClass().getName();75 }76 /*77 * (non-Javadoc)78 * 79 * @see org.jboss.test.faces.mockito.factory.FactoryMock#createNewMockInstance()80 */81 @SuppressWarnings("unchecked")82 public T createNewMockInstance() {83 try {84 return (T) mock.getClass().newInstance();85 } catch (IllegalAccessException e) {86 throw new IllegalStateException("Cannot create instance for mock factory of class '" + originalClass + "'",87 e);88 } catch (InstantiationException e) {89 throw new IllegalStateException("Cannot create instance for mock factory of class '" + originalClass + "'",90 e);91 }92 }93 /**94 * Enhance the mock class instance with mocking ability.95 * 96 * @param mockToEnhance97 * the mock to enhance98 */99 void enhance(T mockToEnhance) {100 MockMethodInterceptor interceptor = ClassExtensionHelper.getInterceptor(mock);101 ((Factory) mockToEnhance).setCallbacks(new Callback[] { interceptor, SerializableNoOp.SERIALIZABLE_INSTANCE });102 }103 /**104 * Gets the declared field from type.105 * 106 * @param type107 * the type108 * @param fieldName109 * the field name110 * @return the declared field from type111 */112 private Field getDeclaredFieldFromType(Class<?> type, String fieldName) {113 try {114 return type.getDeclaredField(fieldName);...
MockMethodInterceptor
Using AI Code Generation
1import org.easymock.internal.ClassProxyFactory;2import org.easymock.internal.MockMethodInterceptor;3public class 1 {4 public static void main(String[] args) {5 MockMethodInterceptor methodInterceptor = new MockMethodInterceptor();6 ClassProxyFactory factory = new ClassProxyFactory(methodInterceptor);7 Class<?> proxyClass = factory.createProxyClass(Hello.class);8 Hello hello = (Hello) factory.createProxy(proxyClass);9 System.out.println(hello.sayHello("world"));10 }11}12import java.lang.reflect.InvocationHandler;13import java.lang.reflect.Method;14import java.lang.reflect.Proxy;15public class 2 {16 public static void main(String[] args) {17 Hello hello = (Hello) Proxy.newProxyInstance(Hello.class.getClassLoader(), new Class[]{Hello.class}, new InvocationHandler() {18 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {19 return "Hello " + args[0];20 }21 });22 System.out.println(hello.sayHello("world"));23 }24}25public class 3 {26 public static void main(String[] args) {27 Hello hello = (Hello) new HelloInvocationHandler().bind(new HelloImpl());28 System.out.println(hello.sayHello("world"));29 }30}31public class 4 {32 public static void main(String[] args) {33 Hello hello = (Hello) new HelloInvocationHandler().bind(new HelloImpl());34 System.out.println(hello.sayHello("world"));35 }36}37public class 5 {38 public static void main(String[] args) {39 Hello hello = (Hello) new HelloInvocationHandler().bind(new HelloImpl());40 System.out.println(hello.sayHello("world"));41 }42}43public class 6 {44 public static void main(String[] args) {45 Hello hello = (Hello) new HelloInvocationHandler().bind(new HelloImpl());46 System.out.println(hello.sayHello("world"));47 }48}49public class 7 {50 public static void main(String[] args) {51 Hello hello = (Hello) new HelloInvocationHandler().bind(new HelloImpl());52 System.out.println(hello.sayHello("world"));53 }54}
MockMethodInterceptor
Using AI Code Generation
1public class 1 {2 public static void main(String[] args) {3 ClassProxyFactory classProxyFactory = new ClassProxyFactory();4 Class<?>[] interfaces = new Class<?>[]{I1.class};5 Class<?>[] classes = new Class<?>[]{C1.class};6 Class<?>[] classes1 = new Class<?>[]{C1.class};7 MockMethodInterceptor mockMethodInterceptor = new MockMethodInterceptor();8 Object proxy = classProxyFactory.createProxy(interfaces, classes, classes1, mockMethodInterceptor);9 I1 i1 = (I1) proxy;10 i1.m1();11 }12}13public class 2 {14 public static void main(String[] args) {15 ClassProxyFactory classProxyFactory = new ClassProxyFactory();16 Class<?>[] interfaces = new Class<?>[]{I1.class};17 Class<?>[] classes = new Class<?>[]{C1.class};18 Class<?>[] classes1 = new Class<?>[]{C1.class};19 MockMethodInterceptor mockMethodInterceptor = new MockMethodInterceptor();20 Object proxy = classProxyFactory.createProxy(interfaces, classes, classes1, mockMethodInterceptor);21 I1 i1 = (I1) proxy;22 i1.m1();23 }24}25public class 3 {26 public static void main(String[] args) {27 ClassProxyFactory classProxyFactory = new ClassProxyFactory();28 Class<?>[] interfaces = new Class<?>[]{I1.class};29 Class<?>[] classes = new Class<?>[]{C1.class};30 Class<?>[] classes1 = new Class<?>[]{C1.class};31 MockMethodInterceptor mockMethodInterceptor = new MockMethodInterceptor();32 Object proxy = classProxyFactory.createProxy(interfaces, classes, classes1, mockMethodInterceptor);33 I1 i1 = (I1) proxy;34 i1.m1();35 }36}37public class 4 {38 public static void main(String[] args) {39 ClassProxyFactory classProxyFactory = new ClassProxyFactory();40 Class<?>[] interfaces = new Class<?>[]{I1.class};41 Class<?>[] classes = new Class<?>[]{C1.class};42 Class<?>[] classes1 = new Class<?>[]{C1.class};43 MockMethodInterceptor mockMethodInterceptor = new MockMethodInterceptor();44 Object proxy = classProxyFactory.createProxy(interfaces, classes, classes
MockMethodInterceptor
Using AI Code Generation
1public class MockMethodInterceptorTest {2 private ClassProxyFactory classProxyFactory;3 public void setUp() {4 classProxyFactory = new ClassProxyFactory();5 }6 public void testMockMethodInterceptor() {7 MockMethodInterceptor mockMethodInterceptor = new MockMethodInterceptor();8 ClassProxy classProxy = classProxyFactory.createClassProxy(1.class);9 classProxy.setMockMethodInterceptor(mockMethodInterceptor);10 1 classUnderTest = (1) classProxy.createMock();11 classUnderTest.method1();12 classUnderTest.method2();13 classUnderTest.method3();14 classUnderTest.method4();15 classUnderTest.method5();16 classUnderTest.method6();17 classUnderTest.method7();18 classUnderTest.method8();19 classUnderTest.method9();20 classUnderTest.method10();21 classUnderTest.method11();22 classUnderTest.method12();23 classUnderTest.method13();24 classUnderTest.method14();25 classUnderTest.method15();26 classUnderTest.method16();27 classUnderTest.method17();28 classUnderTest.method18();29 classUnderTest.method19();30 classUnderTest.method20();31 classUnderTest.method21();32 classUnderTest.method22();33 classUnderTest.method23();34 classUnderTest.method24();35 classUnderTest.method25();36 classUnderTest.method26();37 classUnderTest.method27();38 classUnderTest.method28();39 classUnderTest.method29();40 classUnderTest.method30();41 classUnderTest.method31();42 classUnderTest.method32();43 classUnderTest.method33();44 classUnderTest.method34();45 classUnderTest.method35();46 classUnderTest.method36();47 classUnderTest.method37();48 classUnderTest.method38();49 classUnderTest.method39();50 classUnderTest.method40();51 classUnderTest.method41();52 classUnderTest.method42();53 classUnderTest.method43();54 classUnderTest.method44();55 classUnderTest.method45();56 classUnderTest.method46();57 classUnderTest.method47();58 classUnderTest.method48();59 classUnderTest.method49();60 classUnderTest.method50();61 classUnderTest.method51();62 classUnderTest.method52();63 classUnderTest.method53();64 classUnderTest.method54();65 classUnderTest.method55();66 classUnderTest.method56();67 classUnderTest.method57();68 classUnderTest.method58();69 classUnderTest.method59();70 classUnderTest.method60();71 classUnderTest.method61();72 classUnderTest.method62();73 classUnderTest.method63();
MockMethodInterceptor
Using AI Code Generation
1import java.io.File;2import java.io.IOException;3import java.util.ArrayList;4import java.util.List;5import org.easymock.EasyMock;6import org.easymock.MockMethodInterceptor;7import org.easymock.internal.ClassProxyFactory;8import org.easymock.internal.MocksControl;9import org.easymock.internal.RealMethod;10import org.easymock.internal.RealMethodDispatcher;11import org.easymock.internal.UnexpectedInvocation;12import org.easymock.internal.matchers.Equals;13import org.easymock.internal.matchers.InstanceOf;14import org.easymock.internal.matchers.LessThan;15import org.easymock.internal.matchers.Not;16import org.easymock.internal.matchers.Or;17import org.easymock.internal.matchers.Regex;18import org.easymock.internal.matchers.StartsWith;19import org.easymock.internal.matchers.EndsWith;20import org.easymock.internal.matchers.Null;21import org.easymock.internal.matchers.NotNull;22import org.easymock.internal.matchers.GreaterThan;23import org.easymock.internal.matchers.GreaterOrEqual;24import org.easymock.internal.matchers.LessOrEqual;25import org.easymock.internal.matchers.Same;26import org.easymock.internal.matchers.And;27import org.easymock.internal.matchers.ArrayEquals;28import org.easymock.internal.matchers.ArrayHasAtLeastOneElement;29import org.easymock.internal.matchers.ArrayHasElement;30import org.easymock.internal.matchers.ArrayHasNoElements;31import org.easymock.internal.matchers.ArrayHasNoNullElements;32import org.easymock.internal.matchers.ArrayHasNoNullElementsAndNoDuplicates;33import org.easymock.internal.matchers.ArrayHasOnlyElements;34import org.easymock.internal.matchers.ArrayHasOnlyElementsOfType;35import org.easymock.internal.matchers.ArrayHasSize;36import org.easymock.internal.matchers.ArrayHasSizeGreaterThan;37import org.easymock.internal.matchers.ArrayHasSizeGreaterThanOrEqualTo;38import org.easymock.internal.matchers.ArrayHasSizeLessThan;39import org.easym
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!