From c2c8150a35f2ffcafd1f2d7aa3b246339d7b34f3 Mon Sep 17 00:00:00 2001 From: Ramnivas Laddad Date: Tue, 3 Nov 2009 00:51:22 +0000 Subject: [PATCH] Modified staticmethod mocking to remove compile-time dependency on JUnit (see ROO-314 and related issues) git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@2243 50f2f4bb-b051-0410-bef5-90022cba6387 --- org.springframework.aspects/pom.xml | 2 +- ...tationDrivenStaticEntityMockingControl.aj} | 26 +++++++------- ...DrivenStaticEntityMockingControlTest.java} | 35 +++++++++---------- .../mock/staticmock/Delegate.java | 24 ++++++------- 4 files changed, 41 insertions(+), 46 deletions(-) rename org.springframework.aspects/src/main/java/org/springframework/mock/staticmock/{JUnitStaticEntityMockingControl.aj => AnnotationDrivenStaticEntityMockingControl.aj} (52%) rename org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/{JUnitStaticEntityMockingControlTest.java => AnnotationDrivenStaticEntityMockingControlTest.java} (77%) diff --git a/org.springframework.aspects/pom.xml b/org.springframework.aspects/pom.xml index 9fcd914e3a1..e4fd535b598 100644 --- a/org.springframework.aspects/pom.xml +++ b/org.springframework.aspects/pom.xml @@ -52,7 +52,7 @@ junit junit - compile + test javax.mail diff --git a/org.springframework.aspects/src/main/java/org/springframework/mock/staticmock/JUnitStaticEntityMockingControl.aj b/org.springframework.aspects/src/main/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControl.aj similarity index 52% rename from org.springframework.aspects/src/main/java/org/springframework/mock/staticmock/JUnitStaticEntityMockingControl.aj rename to org.springframework.aspects/src/main/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControl.aj index 397cbcda690..fb38107b474 100644 --- a/org.springframework.aspects/src/main/java/org/springframework/mock/staticmock/JUnitStaticEntityMockingControl.aj +++ b/org.springframework.aspects/src/main/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControl.aj @@ -1,26 +1,24 @@ package org.springframework.mock.staticmock; import javax.persistence.Entity; -import org.junit.Test; /** - * JUnit-specific aspect to use in test build to enable mocking static methods + * Annotation-based aspect to use in test build to enable mocking static methods * on Entity classes, as used by Roo for finders. *
- * Mocking will occur in JUnit tests where the Test class is annotated with the - * @MockStaticEntityMethods annotation, in the call stack of each - * JUnit @Test method. + * Mocking will occur in the call stack of any method in a class (typically a test class) + * that is annotated with the @MockStaticEntityMethods annotation. *
* Also provides static methods to simplify the programming model for * entering playback mode and setting expected return values. *
* Usage:
    - *
  1. Annotate a JUnit test class with @MockStaticEntityMethods. - *
  2. In each @Test method, JUnitMockControl will begin in recording mode. + *
  3. Annotate a test class with @MockStaticEntityMethods. + *
  4. In each test method, AnnotationDrivenStaticEntityMockingControl will begin in recording mode. * Invoke static methods on Entity classes, with each recording-mode invocation * being followed by an invocation to the static expectReturn() or expectThrow() - * method on JUnitMockControl. - *
  5. Invoke the static JUnitMockControl.playback() method. + * method on AnnotationDrivenStaticEntityMockingControl. + *
  6. Invoke the static AnnotationDrivenStaticEntityMockingControl() method. *
  7. Call the code you wish to test that uses the static methods. Verification will * occur automatically. *
@@ -31,26 +29,26 @@ import org.junit.Test; * @author Ramnivas Laddad * */ -public aspect JUnitStaticEntityMockingControl extends AbstractMethodMockingControl { +public aspect AnnotationDrivenStaticEntityMockingControl extends AbstractMethodMockingControl { /** * Stop recording mock calls and enter playback state */ public static void playback() { - JUnitStaticEntityMockingControl.aspectOf().playbackInternal(); + AnnotationDrivenStaticEntityMockingControl.aspectOf().playbackInternal(); } public static void expectReturn(Object retVal) { - JUnitStaticEntityMockingControl.aspectOf().expectReturnInternal(retVal); + AnnotationDrivenStaticEntityMockingControl.aspectOf().expectReturnInternal(retVal); } public static void expectThrow(Throwable throwable) { - JUnitStaticEntityMockingControl.aspectOf().expectThrowInternal(throwable); + AnnotationDrivenStaticEntityMockingControl.aspectOf().expectThrowInternal(throwable); } // Only matches directly annotated @Test methods, to allow methods in // @MockStatics classes to invoke each other without resetting the mocking environment - protected pointcut mockStaticsTestMethod() : execution(@Test public * (@MockStaticEntityMethods *).*(..)); + protected pointcut mockStaticsTestMethod() : execution(public * (@MockStaticEntityMethods *).*(..)); protected pointcut methodToMock() : execution(public static * (@Entity *).*(..)); diff --git a/org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/JUnitStaticEntityMockingControlTest.java b/org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControlTest.java similarity index 77% rename from org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/JUnitStaticEntityMockingControlTest.java rename to org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControlTest.java index f409d3c5765..286e934bb9f 100644 --- a/org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/JUnitStaticEntityMockingControlTest.java +++ b/org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControlTest.java @@ -16,8 +16,6 @@ package org.springframework.mock.staticmock; -import java.rmi.RemoteException; - import javax.persistence.PersistenceException; import junit.framework.Assert; @@ -25,9 +23,8 @@ import junit.framework.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.springframework.mock.staticmock.JUnitStaticEntityMockingControl; -import org.springframework.mock.staticmock.MockStaticEntityMethods; -import org.springframework.remoting.RemoteAccessException; + +import static org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl.*; /** @@ -38,22 +35,22 @@ import org.springframework.remoting.RemoteAccessException; */ @MockStaticEntityMethods @RunWith(JUnit4.class) -public class JUnitStaticEntityMockingControlTest { +public class AnnotationDrivenStaticEntityMockingControlTest { @Test public void testNoArgIntReturn() { int expectedCount = 13; Person.countPeople(); - JUnitStaticEntityMockingControl.expectReturn(expectedCount); - JUnitStaticEntityMockingControl.playback(); + expectReturn(expectedCount); + playback(); Assert.assertEquals(expectedCount, Person.countPeople()); } @Test(expected=PersistenceException.class) public void testNoArgThrows() { Person.countPeople(); - JUnitStaticEntityMockingControl.expectThrow(new PersistenceException()); - JUnitStaticEntityMockingControl.playback(); + expectThrow(new PersistenceException()); + playback(); Person.countPeople(); } @@ -62,8 +59,8 @@ public class JUnitStaticEntityMockingControlTest { long id = 13; Person found = new Person(); Person.findPerson(id); - JUnitStaticEntityMockingControl.expectReturn(found); - JUnitStaticEntityMockingControl.playback(); + expectReturn(found); + playback(); Assert.assertEquals(found, Person.findPerson(id)); } @@ -74,15 +71,15 @@ public class JUnitStaticEntityMockingControlTest { long id2 = 24; Person found1 = new Person(); Person.findPerson(id1); - JUnitStaticEntityMockingControl.expectReturn(found1); + expectReturn(found1); Person found2 = new Person(); Person.findPerson(id2); - JUnitStaticEntityMockingControl.expectReturn(found2); + expectReturn(found2); Person.findPerson(id1); - JUnitStaticEntityMockingControl.expectReturn(found1); + expectReturn(found1); Person.countPeople(); - JUnitStaticEntityMockingControl.expectReturn(0); - JUnitStaticEntityMockingControl.playback(); + expectReturn(0); + playback(); Assert.assertEquals(found1, Person.findPerson(id1)); Assert.assertEquals(found2, Person.findPerson(id2)); @@ -116,8 +113,8 @@ public class JUnitStaticEntityMockingControlTest { long id = 13; Person found = new Person(); Person.findPerson(id); - JUnitStaticEntityMockingControl.expectReturn(found); - JUnitStaticEntityMockingControl.playback(); + expectReturn(found); + playback(); called(found, id); } diff --git a/org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/Delegate.java b/org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/Delegate.java index 12280148c5f..32cabd6a059 100644 --- a/org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/Delegate.java +++ b/org.springframework.aspects/src/test/java/org/springframework/mock/staticmock/Delegate.java @@ -8,13 +8,13 @@ import junit.framework.Assert; import org.junit.Ignore; import org.junit.Test; -import org.springframework.mock.staticmock.JUnitStaticEntityMockingControl; +import org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl; import org.springframework.mock.staticmock.MockStaticEntityMethods; //Used because verification failures occur after method returns, //so we can't test for them in the test case itself @MockStaticEntityMethods -@Ignore // This isn't meant for direct testing; rather it is driven from JUnintStaticEntityMockingControlTest +@Ignore // This isn't meant for direct testing; rather it is driven from AnnotationDrivenStaticEntityMockingControl public class Delegate { @Test @@ -22,8 +22,8 @@ public class Delegate { long id = 13; Person found = new Person(); Person.findPerson(id); - JUnitStaticEntityMockingControl.expectReturn(found); - JUnitStaticEntityMockingControl.playback(); + AnnotationDrivenStaticEntityMockingControl.expectReturn(found); + AnnotationDrivenStaticEntityMockingControl.playback(); Assert.assertEquals(found, Person.findPerson(id + 1)); } @@ -32,8 +32,8 @@ public class Delegate { long id = 13; Person found = new Person(); Person.findPerson(id); - JUnitStaticEntityMockingControl.expectThrow(new PersistenceException()); - JUnitStaticEntityMockingControl.playback(); + AnnotationDrivenStaticEntityMockingControl.expectThrow(new PersistenceException()); + AnnotationDrivenStaticEntityMockingControl.playback(); Assert.assertEquals(found, Person.findPerson(id + 1)); } @@ -42,10 +42,10 @@ public class Delegate { long id = 13; Person found = new Person(); Person.findPerson(id); - JUnitStaticEntityMockingControl.expectReturn(found); + AnnotationDrivenStaticEntityMockingControl.expectReturn(found); Person.countPeople(); - JUnitStaticEntityMockingControl.expectReturn(25); - JUnitStaticEntityMockingControl.playback(); + AnnotationDrivenStaticEntityMockingControl.expectReturn(25); + AnnotationDrivenStaticEntityMockingControl.playback(); Assert.assertEquals(found, Person.findPerson(id)); } @@ -57,19 +57,19 @@ public class Delegate { @Test public void doesntEverSetReturn() { Person.countPeople(); - JUnitStaticEntityMockingControl.playback(); + AnnotationDrivenStaticEntityMockingControl.playback(); } @Test public void rejectUnexpectedCall() { - JUnitStaticEntityMockingControl.playback(); + AnnotationDrivenStaticEntityMockingControl.playback(); Person.countPeople(); } @Test(expected=RemoteException.class) public void testVerificationFailsEvenWhenTestFailsInExpectedManner() throws RemoteException { Person.countPeople(); - JUnitStaticEntityMockingControl.playback(); + AnnotationDrivenStaticEntityMockingControl.playback(); // No calls to allow verification failure throw new RemoteException(); }