Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add mock in composition tests. Make expectedReturnFor() public. Refac…
…tor tests (a bit).

git-svn-id: https://mock4as.googlecode.com/svn/trunk@21 faef3d04-e93e-0410-8cca-bf3cd97b13f1
  • Loading branch information
jpsoulsf@gmail.com committed Dec 5, 2008
1 parent a769b86 commit 8f9186c
Show file tree
Hide file tree
Showing 5 changed files with 313 additions and 79 deletions.
78 changes: 22 additions & 56 deletions org/mock4as/AllTests.as
Expand Up @@ -5,6 +5,7 @@ package org.mock4as

import org.mock4as.samples.bank.BankSystemTest;
import org.mock4as.samples.greeting.GreetingTest;
import org.mock4as.samples.mockInComposition.test.MockInCompositionTest;
import org.mock4as.samples.publisher.PublisherTest;

public class AllTests extends TestCase
Expand All @@ -13,63 +14,28 @@ package org.mock4as
public function AllTests(methodName : String){
super(methodName);
}

public static function suite():TestSuite{
var myTS:TestSuite = new TestSuite();
myTS.addTest(new AllTests("testTheTruth"));

// test negative scenarios
myTS.addTest(new MockTest("testWrongMethodName"));
myTS.addTest(new MockTest("testWrongFirstArg"));
myTS.addTest(new MockTest("testWrongSecondArg"));
myTS.addTest(new MockTest("testWrongThirdArg"));
myTS.addTest(new MockTest("testWrongArgNumberLessArgs"));
myTS.addTest(new MockTest("testMethodInvocationMoreTimesThanExpected"));
myTS.addTest(new MockTest("testMethodInvocationLessTimesThanExpected"));

myTS.addTest(new MockTest("testFailsIfMethodNeverCalled"));
myTS.addTest(new MockTest("testFailsIfMoreMethodsAreCalledThanExpected"));
// teest positive scenario
myTS.addTest(new MockTest("testSuccessMethodInvocation"));



// mock samples positive tests
myTS.addTest(new GreetingTest("testGreetingInAnyLanguage"));
myTS.addTest(new PublisherTest("testOneSubscriberReceivesAMessage"));
myTS.addTest(new BankSystemTest("testTheTruth"));
myTS.addTest(new BankSystemTest("testTransferSameCurrency"));
myTS.addTest(new BankSystemTest("testTransferDifferentCurrency"));
myTS.addTest(new BankSystemTest("testTransferInsufficientFunds"));

// mock in composition
// If you don't want to subclass mock (mainly because you want to subclass another class)
// you can use mock in composition
//
myTS.addTest(new MockTest("testSuccess_forAClassUsingMockInComposition_whereExpectedCallsEqualActualCalls_shouldReturnTrue"));
myTS.addTest(new MockTest("testSuccess_forAClassUsingMockInComposition_whereExpectedCallsDoNotEqualActualCalls_shouldReturnFalse"));

myTS.addTest( new MockTest("testSuccess_whenMoreMethodsAreCalledThanExpected_shouldReturnFalse"));
myTS.addTest( new MockTest("testSuccess_whenNoMethodsCalledButAtLeastOneExpected_shouldReturnFalse"));
myTS.addTest( new MockTest("testSuccess_whenExpectedCallsEqualActualCalls_shouldReturnTrue"));
myTS.addTest( new MockTest("testSuccess_whenExpectedCallsWithExpectedArgsEqualActualCallsWithActualArgs_shouldReturnTrue"));
myTS.addTest( new MockTest("testSuccess_whenExpectedArgDoesNotEqualActualArg_shouldReturnFalse"));
myTS.addTest( new MockTest("testSuccess_whenExpected2ndArgDoesNotEqualActual2ndArg_shouldReturnFalse"));
myTS.addTest( new MockTest("testWillReturn_shouldReturnValueDefinedByTest"));
myTS.addTest( new MockTest("testWillReturn_shouldReturnTheObjectForTheMethodWithTheExpectedArgs"));
myTS.addTest( new MockTest("testWillThrow_shouldThrowErrorObjectDefinedByTest"));
myTS.addTest( new MockTest("testSuccess_whenExpectedMethodIsCalledMultipleTimesWithAtLeastOneUnexpectedArg_shouldFail"));
myTS.addTest( new MockTest("testSuccess_whenMethodCalledTwiceWithSameExpectedArg_shouldReturnTrue"));
myTS.addTest( new MockTest("testSuccess_whenMethodNameCalledIsDifferentThanMethodNameExpected_shouldReturnFalse"));
myTS.addTest( new MockTest("testSuccess_whenMethodNameCalledWithSameArgsButDifferentNameAsMethodExpected_shouldReturnFalse"));
myTS.addTest( new MockTest("testSuccess_whenLessArgsArePassedThanExpected_shouldReturnFalse"));
myTS.addTest( new MockTest("testSuccess_whenErrorExpectedAndMethodsCalledAsExpected_shouldReturnTrue"));
return myTS;
}

public function testTheTruth():void{
assertTrue(true);
}
public static function suite():TestSuite
{
var testSuite:TestSuite = new TestSuite();
testSuite.addTest(new AllTests("testTheTruth"));
testSuite.addTest(new GreetingTest("testGreetingInAnyLanguage"));
testSuite.addTest(new PublisherTest("testOneSubscriberReceivesAMessage"));
testSuite.addTest(new BankSystemTest("testTheTruth"));
testSuite.addTest(new BankSystemTest("testTransferSameCurrency"));
testSuite.addTest(new BankSystemTest("testTransferDifferentCurrency"));
testSuite.addTest(new BankSystemTest("testTransferInsufficientFunds"));
testSuite.addTest(MockTest.suite());
testSuite.addTest(MockInCompositionTest.suite());
return testSuite;
}

public function testTheTruth():void{
assertTrue(true);
}



}
}

2 changes: 1 addition & 1 deletion org/mock4as/Mock.as
Expand Up @@ -82,7 +82,7 @@ package org.mock4as
}
}

protected function expectedReturnFor(methodName:String="Depricated"):Object
public function expectedReturnFor(methodName:String="Depricated"):Object
{
return currentReturnValue;
}
Expand Down
62 changes: 41 additions & 21 deletions org/mock4as/MockTest.as
@@ -1,11 +1,11 @@
package org.mock4as
{
import flexunit.framework.TestCase;
import flexunit.framework.TestSuite;

import org.mock4as.samples.MockSomeInterface;
import org.mock4as.samples.greeting.Greeting;
import org.mock4as.samples.greeting.ITranslator;
import org.mock4as.samples.mockInComposition.MockInComposition;

public class MockTest extends TestCase
{
Expand All @@ -17,6 +17,46 @@ package org.mock4as
public function MockTest(methodName : String){
super(methodName);
}

public static function suite():TestSuite
{
var testSuite:TestSuite = new TestSuite();

// test negative scenarios
testSuite.addTest(new MockTest("testWrongMethodName"));
testSuite.addTest(new MockTest("testWrongFirstArg"));
testSuite.addTest(new MockTest("testWrongSecondArg"));
testSuite.addTest(new MockTest("testWrongThirdArg"));
testSuite.addTest(new MockTest("testWrongArgNumberLessArgs"));
testSuite.addTest(new MockTest("testMethodInvocationMoreTimesThanExpected"));
testSuite.addTest(new MockTest("testMethodInvocationLessTimesThanExpected"));

testSuite.addTest(new MockTest("testFailsIfMethodNeverCalled"));
testSuite.addTest(new MockTest("testFailsIfMoreMethodsAreCalledThanExpected"));
// teest positive scenario
testSuite.addTest(new MockTest("testSuccessMethodInvocation"));
// mock in composition
// If you don't want to subclass mock (mainly because you want to subclass another class)
// you can use mock in composition
//
testSuite.addTest( new MockTest("testSuccess_whenMoreMethodsAreCalledThanExpected_shouldReturnFalse"));
testSuite.addTest( new MockTest("testSuccess_whenNoMethodsCalledButAtLeastOneExpected_shouldReturnFalse"));
testSuite.addTest( new MockTest("testSuccess_whenExpectedCallsEqualActualCalls_shouldReturnTrue"));
testSuite.addTest( new MockTest("testSuccess_whenExpectedCallsWithExpectedArgsEqualActualCallsWithActualArgs_shouldReturnTrue"));
testSuite.addTest( new MockTest("testSuccess_whenExpectedArgDoesNotEqualActualArg_shouldReturnFalse"));
testSuite.addTest( new MockTest("testSuccess_whenExpected2ndArgDoesNotEqualActual2ndArg_shouldReturnFalse"));
testSuite.addTest( new MockTest("testWillReturn_shouldReturnValueDefinedByTest"));
testSuite.addTest( new MockTest("testWillReturn_shouldReturnTheObjectForTheMethodWithTheExpectedArgs"));
testSuite.addTest( new MockTest("testWillThrow_shouldThrowErrorObjectDefinedByTest"));
testSuite.addTest( new MockTest("testSuccess_whenExpectedMethodIsCalledMultipleTimesWithAtLeastOneUnexpectedArg_shouldFail"));
testSuite.addTest( new MockTest("testSuccess_whenMethodCalledTwiceWithSameExpectedArg_shouldReturnTrue"));
testSuite.addTest( new MockTest("testSuccess_whenMethodNameCalledIsDifferentThanMethodNameExpected_shouldReturnFalse"));
testSuite.addTest( new MockTest("testSuccess_whenMethodNameCalledWithSameArgsButDifferentNameAsMethodExpected_shouldReturnFalse"));
testSuite.addTest( new MockTest("testSuccess_whenLessArgsArePassedThanExpected_shouldReturnFalse"));
testSuite.addTest( new MockTest("testSuccess_whenErrorExpectedAndMethodsCalledAsExpected_shouldReturnTrue"));
return testSuite;
}


public function testFailsIfMethodNeverCalled():void
{
Expand Down Expand Up @@ -149,27 +189,7 @@ package org.mock4as
assertFalse(mock.success());
}

public function testSuccess_forAClassUsingMockInComposition_whereExpectedCallsEqualActualCalls_shouldReturnTrue():void
{
var classWithMockInComposition:MockInComposition = new MockInComposition();
var someStringArg:String = "someStringArg";
classWithMockInComposition.expects("someMethod").times(1).withArg(someStringArg);
classWithMockInComposition.someMethod(someStringArg);
classWithMockInComposition.verify();
assertTrue(classWithMockInComposition.errorMessage(), classWithMockInComposition.success());
}

public function testSuccess_forAClassUsingMockInComposition_whereExpectedCallsDoNotEqualActualCalls_shouldReturnFalse():void
{
var classWithMockInComposition:MockInComposition = new MockInComposition();
var someStringArg:String = "someStringArg";
classWithMockInComposition.expects("someMethod").times(1).withArg(someStringArg);
// In this case, we never call the method on the mock
// but we are expecting someMethod to get called once with someStringArg
// so success should return false
classWithMockInComposition.verify();
assertFalse(classWithMockInComposition.errorMessage(), classWithMockInComposition.success());
}


public function testSuccess_whenMoreMethodsAreCalledThanExpected_shouldReturnFalse():void
Expand Down
26 changes: 25 additions & 1 deletion org/mock4as/samples/mockInComposition/MockInComposition.as
@@ -1,8 +1,9 @@
package org.mock4as.samples.mockInComposition
{
import org.mock4as.Mock;
import org.mock4as.samples.ISomeInterface;

public class MockInComposition extends ClassWeWantToSubclass
public class MockInComposition extends ClassWeWantToSubclass implements ISomeInterface
{
private var mock:Mock;

Expand All @@ -18,6 +19,29 @@ package org.mock4as.samples.mockInComposition
super.someMethod(inSomeStringArg);
}

public function doSomething():void
{
mock.record("doSomething");
}
public function anotherMethodWithNoArgs():void
{
mock.record("anotherMethodWithNoArgs");
}
public function doSomethingElse(someStringArg:String):void
{
mock.record("doSomethingElse", someStringArg);
}

public function doSomethingWith2Args(firstArg:String, secondArg:XML):void
{
mock.record("doSomethingWith2Args", firstArg, secondArg);
}
public function doSomethingAndReturnXML(inNodeName:String):XML
{
mock.record("doSomethingAndReturnXML", inNodeName);
return mock.expectedReturnFor() as XML;
}


/*
* If you want to use mock in composition, you will need to support the mock methods below
Expand Down

0 comments on commit 8f9186c

Please sign in to comment.