mock_objects_test.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 995 行 · 第 1/3 页
PHP
995 行
}
function testSequenceFallback() {
$mock = &new MockDummy();
$mock->setReturnValueAt(0, "aMethod", "aaa", array('a'));
$mock->setReturnValueAt(1, "aMethod", "bbb", array('a'));
$mock->setReturnValue("aMethod", "AAA");
$this->assertIdentical($mock->aMethod('a'), "aaa");
$this->assertIdentical($mock->aMethod('b'), "AAA");
}
function testMethodInterference() {
$mock = &new MockDummy();
$mock->setReturnValueAt(0, "anotherMethod", "aaa");
$mock->setReturnValue("aMethod", "AAA");
$this->assertIdentical($mock->aMethod(), "AAA");
$this->assertIdentical($mock->anotherMethod(), "aaa");
}
}
class TestOfMockExpectationsThatPass extends UnitTestCase {
function testAnyArgument() {
$mock = &new MockDummy();
$mock->expect('aMethod', array('*'));
$mock->aMethod(1);
$mock->aMethod('hello');
}
function testAnyTwoArguments() {
$mock = &new MockDummy();
$mock->expect('aMethod', array('*', '*'));
$mock->aMethod(1, 2);
}
function testSpecificArgument() {
$mock = &new MockDummy();
$mock->expect('aMethod', array(1));
$mock->aMethod(1);
}
function testExpectation() {
$mock = &new MockDummy();
$mock->expect('aMethod', array(new IsAExpectation('Dummy')));
$mock->aMethod(new Dummy());
}
function testArgumentsInSequence() {
$mock = &new MockDummy();
$mock->expectAt(0, 'aMethod', array(1, 2));
$mock->expectAt(1, 'aMethod', array(3, 4));
$mock->aMethod(1, 2);
$mock->aMethod(3, 4);
}
function testAtLeastOnceSatisfiedByOneCall() {
$mock = &new MockDummy();
$mock->expectAtLeastOnce('aMethod');
$mock->aMethod();
}
function testAtLeastOnceSatisfiedByTwoCalls() {
$mock = &new MockDummy();
$mock->expectAtLeastOnce('aMethod');
$mock->aMethod();
$mock->aMethod();
}
function testOnceSatisfiedByOneCall() {
$mock = &new MockDummy();
$mock->expectOnce('aMethod');
$mock->aMethod();
}
function testMinimumCallsSatisfiedByEnoughCalls() {
$mock = &new MockDummy();
$mock->expectMinimumCallCount('aMethod', 1);
$mock->aMethod();
}
function testMinimumCallsSatisfiedByTooManyCalls() {
$mock = &new MockDummy();
$mock->expectMinimumCallCount('aMethod', 3);
$mock->aMethod();
$mock->aMethod();
$mock->aMethod();
$mock->aMethod();
}
function testMaximumCallsSatisfiedByEnoughCalls() {
$mock = &new MockDummy();
$mock->expectMaximumCallCount('aMethod', 1);
$mock->aMethod();
}
function testMaximumCallsSatisfiedByNoCalls() {
$mock = &new MockDummy();
$mock->expectMaximumCallCount('aMethod', 1);
}
}
class MockWithInjectedTestCase extends SimpleMock {
function &_getCurrentTestCase() {
$context = &SimpleTest::getContext();
$test = &$context->getTest();
return $test->getMockedTest();
}
}
SimpleTest::setMockBaseClass('MockWithInjectedTestCase');
Mock::generate('Dummy', 'MockDummyWithInjectedTestCase');
SimpleTest::setMockBaseClass('SimpleMock');
Mock::generate('SimpleTestCase');
class LikeExpectation extends IdenticalExpectation {
function LikeExpectation($expectation) {
$expectation->_message = '';
$this->IdenticalExpectation($expectation);
}
function test($compare) {
$compare->_message = '';
return parent::test($compare);
}
function testMessage($compare) {
$compare->_message = '';
return parent::testMessage($compare);
}
}
class TestOfMockExpectations extends UnitTestCase {
var $test;
function setUp() {
$this->test = &new MockSimpleTestCase();
}
function &getMockedTest() {
return $this->test;
}
function testSettingExpectationOnNonMethodThrowsError() {
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectMaximumCallCount('aMissingMethod', 2);
$this->assertError();
}
function testMaxCallsDetectsOverrun() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new MaximumCallCountExpectation('aMethod', 2)),
3));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectMaximumCallCount('aMethod', 2);
$mock->aMethod();
$mock->aMethod();
$mock->aMethod();
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testTallyOnMaxCallsSendsPassOnUnderrun() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new MaximumCallCountExpectation('aMethod', 2)),
2));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectMaximumCallCount("aMethod", 2);
$mock->aMethod();
$mock->aMethod();
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testExpectNeverDetectsOverrun() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new MaximumCallCountExpectation('aMethod', 0)),
1));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectNever('aMethod');
$mock->aMethod();
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testTallyOnExpectNeverStillSendsPassOnUnderrun() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new MaximumCallCountExpectation('aMethod', 0)),
0));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectNever('aMethod');
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testMinCalls() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new MinimumCallCountExpectation('aMethod', 2)),
2));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectMinimumCallCount('aMethod', 2);
$mock->aMethod();
$mock->aMethod();
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testFailedNever() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new MaximumCallCountExpectation('aMethod', 0)),
1));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectNever('aMethod');
$mock->aMethod();
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testUnderOnce() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new CallCountExpectation('aMethod', 1)),
0));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectOnce('aMethod');
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testOverOnce() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new CallCountExpectation('aMethod', 1)),
2));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectOnce('aMethod');
$mock->aMethod();
$mock->aMethod();
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testUnderAtLeastOnce() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new MinimumCallCountExpectation('aMethod', 1)),
0));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectAtLeastOnce("aMethod");
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testZeroArguments() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new ParametersExpectation(array())),
array(),
'*'));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expect("aMethod", array());
$mock->aMethod();
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testExpectedArguments() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new ParametersExpectation(array(1, 2, 3))),
array(1, 2, 3),
'*'));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expect('aMethod', array(1, 2, 3));
$mock->aMethod(1, 2, 3);
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testFailedArguments() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new ParametersExpectation(array('this'))),
array('that'),
'*'));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expect('aMethod', array('this'));
$mock->aMethod('that');
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testWildcardsAreTranslatedToAnythingExpectations() {
$this->test->expectOnce('assert', array(
new LikeExpectation(new ParametersExpectation(array(
new AnythingExpectation(), 123, new AnythingExpectation()))),
array(100, 123, 101),
'*'));
$mock = &new MockDummyWithInjectedTestCase($this);
$mock->expect("aMethod", array('*', 123, '*'));
$mock->aMethod(100, 123, 101);
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testSpecificPassingSequence() {
$this->test->expectAt(0, 'assert', array(
new LikeExpectation(new ParametersExpectation(array(1, 2, 3))),
array(1, 2, 3),
'*'));
$this->test->expectAt(1, 'assert', array(
new LikeExpectation(new ParametersExpectation(array('Hello'))),
array('Hello'),
'*'));
$mock = &new MockDummyWithInjectedTestCase();
$mock->expectAt(1, 'aMethod', array(1, 2, 3));
$mock->expectAt(2, 'aMethod', array('Hello'));
$mock->aMethod();
$mock->aMethod(1, 2, 3);
$mock->aMethod('Hello');
$mock->aMethod();
$mock->_mock->atTestEnd('testSomething', $this->test);
}
function testNonArrayForExpectedParametersGivesError() {
$mock = &new MockDummyWithInjectedTestCase();
$mock->expect("aMethod", "foo");
$this->assertErrorPattern('/\$args.*not an array/i');
$mock->aMethod();
$mock->tally();
$mock->_mock->atTestEnd('testSomething', $this->test);
}
}
class TestOfMockComparisons extends UnitTestCase {
function testEqualComparisonOfMocksDoesNotCrash() {
$expectation = &new EqualExpectation(new MockDummy());
$this->assertTrue($expectation->test(new MockDummy(), true));
}
function testIdenticalComparisonOfMocksDoesNotCrash() {
$expectation = &new IdenticalExpectation(new MockDummy());
$this->assertTrue($expectation->test(new MockDummy()));
}
}
class ClassWithSpecialMethods {
function __get($name) { }
function __set($name, $value) { }
function __isset($name) { }
function __unset($name) { }
function __call($method, $arguments) { }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?