/** * Return statements for invoking the test and verifying the result. * * @param \Box\TestScribe\Execution\ExecutionResult $executionResult * * @param string $targetObjectName * * @return string */ public function genExecutionAndVerification(ExecutionResult $executionResult, $targetObjectName) { $exception = $executionResult->getException(); $isReturnTypeVoid = $this->globalComputedConfig->isReturnTypeVoid(); $shouldVerifyResult = $exception === null && !$isReturnTypeVoid; $methodArguments = $executionResult->getMethodArguments(); $argumentsString = $this->argumentsRenderer->renderArgumentsAsStringInCode($methodArguments); $executionStatements = $this->executionRenderer->genExecutionStatements($shouldVerifyResult, $argumentsString, $targetObjectName); $resultValidationStatements = $this->resultValidationRenderer->genResultValidation($shouldVerifyResult, $executionResult); $result = ArrayUtil::joinNonEmptyStringsWithNewLine([$executionStatements, $resultValidationStatements], 2); return $result; }
/** * Return statements for invoking the test and verifying the result. * * @param \Box\TestScribe\Execution\ExecutionResult $executionResult * * @return string */ public function renderMethodInvocation(ExecutionResult $executionResult) { $mockClassUnderTest = $executionResult->getMockClassUnderTest(); $config = $this->globalComputedConfig; $inMethod = $config->getInMethod(); $reflectionMethod = $inMethod->getReflectionMethod(); $isStatic = $reflectionMethod->isStatic(); $fullyQualifiedClassName = $config->getFullClassName(); $constructorArguments = $executionResult->getConstructorArguments(); $constructorArgumentsRenderedResult = $this->argumentsRenderer->renderArguments($constructorArguments); $constructorArgumentsString = $constructorArgumentsRenderedResult->getArgumentString(); $mockObjectForConstructorStatements = $constructorArgumentsRenderedResult->getMockStatements(); if ($mockObjectForConstructorStatements) { $mockObjectForConstructorStatements = "// Setup mocks for parameters to the constructor.\n\n" . $mockObjectForConstructorStatements; } $methodArguments = $executionResult->getMethodArguments(); $argumentsToTheMethodRenderedResult = $this->argumentsRenderer->renderArguments($methodArguments); $mockMethodArgumentsStatements = $argumentsToTheMethodRenderedResult->getMockStatements(); if ($mockMethodArgumentsStatements) { $mockMethodArgumentsStatements = "// Setup mocks for parameters to the method under test.\n\n" . $mockMethodArgumentsStatements; } $mockAndComment = ArrayUtil::joinNonEmptyStringsWithNewLine(["{$mockMethodArgumentsStatements}", "// Execute the method under test."], 2); $isPartialMocking = $this->partialMockUtil->isClassUnderTestPartiallyMocked($mockClassUnderTest); $createObjectWithMocksStatement = ''; $targetObjectName = ''; if (!$isStatic) { if ($isPartialMocking) { // @TODO (ryang 3/4/15) : move the generated mock statements for the constructor into this scope. $createObjectWithMocksStatement = $this->mockRenderer->renderPartialMock($mockClassUnderTest, $constructorArgumentsString, $mockObjectForConstructorStatements); $targetObjectName = $mockClassUnderTest->getMockObjectName(); } else { $targetObjectName = 'objectUnderTest'; $createObjectStatement = "\${$targetObjectName} = new {$fullyQualifiedClassName}({$constructorArgumentsString});"; $createObjectWithMocksStatement = ArrayUtil::joinNonEmptyStringsWithNewLine([$mockObjectForConstructorStatements, $createObjectStatement], 2); } } $invocationStatement = $this->executionAndVerificationRenderer->genExecutionAndVerification($executionResult, $targetObjectName); $result = ArrayUtil::joinNonEmptyStringsWithNewLine([$mockAndComment, $createObjectWithMocksStatement, $invocationStatement], 2); return $result; }