phpunit只处理一个文件而不是多个文件

时间:2017-03-16 13:23:37

标签: php unit-testing testing phpunit

我的测试文件夹如下所示:

- Tests
- folder
-- classTest.php
- anotherClassTest.php

在我创建folder/classTest.php之前,PHPUnit已经完美地测试了anotherClassTest.php但是因为我已经添加了folder/classTest.php它只测试了一个并且不再测试anotherClassTest.php 1}}。

我的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
        strict="true"
        bootstrap="./Tests/Bootstrap.php"
>
    <testsuites>
        <testsuite name="unit">
            <directory>Tests/*</directory>
        </testsuite>
    </testsuites>
    <logging>
        <log type="testdox-html" target="Tests/results.html"/>
    </logging>
    <filter>
        <blacklist>
            <directory suffix=".php">vendor</directory>
        </blacklist>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">Tests/</directory>
        </whitelist>
    </filter>
</phpunit>

这里出了什么问题?

更新: anotherClassTest.php

<?php
/**
 * Created by PhpStorm.
 * User: chris
 * Date: 15-03-17
 * Time: 14:36
 */

use PHPUnit\Framework\TestCase;

/**
 * Class KeyAgencyGeneralTest
 */
class KeyAgencyGeneralTest
    extends TestCase
{
    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::getModuleInfo
     * Test if method is static
     * @todo improve test; do not make use of reflection class and $method->name ==
     */
    public function testGetModuleInfoIsAStaticMethod()
    {
        $mock = $this->createMock(\ProcessWire\KeyAgencyGeneral::class);
        $refl = new ReflectionClass(get_class($mock));
        $staticMethods = $refl->getMethods(ReflectionMethod::IS_STATIC);

        /** @var ReflectionMethod $method */
        foreach ($staticMethods as $method) {
            if ($method->name == 'getModuleInfo') {
                $this->assertEquals('getModuleInfo', $method->name);
            }
        }
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::getModuleInfo
     * Test is response is an array
     */
    public function testGetModuleInfoReturnsArray()
    {
        $this->assertInternalType(
            'array',
            \ProcessWire\KeyAgencyGeneral::getModuleInfo()
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::getModuleInfo
     * Test array for correct keys
     */
    public function testGetModuleInfoContainsRequiredKeys()
    {
        $result = \ProcessWire\KeyAgencyGeneral::getModuleInfo();

        $this->assertArrayHasKey('autoload', $result);
        $this->assertArrayHasKey('href', $result);
        $this->assertArrayHasKey('requires', $result);
        $this->assertArrayHasKey('singular', $result);
        $this->assertArrayHasKey('title', $result);
        $this->assertArrayHasKey('version', $result);
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_parseLoadString
     * Test if return value of with correct input is an array
     */
    public function testParseLoadStringReturnsArrayWhenParsingModel()
    {
        $this->assertInternalType(
            'array',
            $this
                ->__getInstance()
                ->_parseLoadString('model', 'KeyAgencyGeneral/abstract')
        );
    }

    /**
     * Get instance of module KeyAgencyGeneral
     *
     * @param bool $reflection return reflection class
     * @return \ProcessWire\KeyAgencyGeneral|ReflectionClass
     */
    private function __getInstance($reflection = false)
    {
        if ($reflection) {
            return new ReflectionClass(\ProcessWire\KeyAgencyGeneral::class);
        }
        return new \ProcessWire\KeyAgencyGeneral();
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_getObserver
     * Test if KeyAgencyGeneral_Model_Observer is returned
     */
    public function testGetObserverReturnsCorrectInstance()
    {
        $this->assertInstanceOf(
            \ProcessWire\KeyAgencyGeneral_Model_Observer::class,
            $this
                ->__getReflectionMethod('_getObserver')
                ->invoke($this->__getInstance())
        );
    }

    /**
     * Get method from reflection class
     *
     * @param $method
     * @return ReflectionMethod
     */
    private function __getReflectionMethod($method)
    {
        $method = $this->__getInstance(true)->getMethod($method);
        $method->setAccessible(true);

        return $method;
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_parseLoadString
     * Check if array response has the required array keys when loading abstract model
     */
    public function testParseLoadStringContainsRequiredPartsWhenParsingModel()
    {
        $result = $this
            ->__getInstance()
            ->_parseLoadString('model', 'KeyAgencyGeneral/abstract');

        $this->assertArrayHasKey('file', $result);
        $this->assertArrayHasKey('location', $result);
        $this->assertArrayHasKey('className', $result);
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_parseLoadString
     * Test if exception is thrown when invalid model is trying to load
     */
    public function testParseLoadStringThrowsExceptionOnInvalidInputStringWhenParsingModel()
    {
        $this->expectException(\Exception::class);
        $this
            ->__getInstance()
            ->_parseLoadString('model', 'KeyAgencyGeneral');
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_parseLoadString
     * Test if return value of with correct input is an array
     */
    public function testParseLoadStringReturnsArrayWhenParsingHelper()
    {
        $this->assertInternalType(
            'array',
            $this
                ->__getInstance()
                ->_parseLoadString('helper', 'KeyAgencyGeneral/abstract')
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_parseLoadString
     * Check if array response has the required array keys when loading abstract helper
     */
    public function testParseLoadStringContainsRequiredPartsWhenParsingHelper()
    {
        $result = $this
            ->__getInstance()
            ->_parseLoadString('helper', 'KeyAgencyGeneral/abstract');

        $this->assertArrayHasKey('file', $result);
        $this->assertArrayHasKey('location', $result);
        $this->assertArrayHasKey('className', $result);
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_parseLoadString
     * Test if exception is thrown when invalid helper is trying to load
     */
    public function testParseLoadStringThrowsExceptionOnInvalidInputStringWhenParsingHelper()
    {
        $this->expectException(\Exception::class);

        $this
            ->__getInstance()
            ->_parseLoadString('helper', 'KeyAgencyGeneral');
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_capitalize
     * Check for capitalized output
     */
    public function testCapitalize()
    {
        $this->assertEquals(
            'This_Is_A_Test_Response',
            $this
                ->__getReflectionMethod('_capitalize')
                ->invoke($this->__getInstance(), 'this_is_a_test_response')
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_underscore
     * Check if string is correctly underscored
     */
    public function testUnderscoreWithStringInput()
    {
        $this->assertEquals(
            'this_is_a_test_response',
            $this
                ->__getReflectionMethod('_underscore')
                ->invoke($this->__getInstance(), 'This is a-test.response')
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_underscore
     * Check if array is correctly underscored
     */
    public function testUnderscoreWithArrayInput()
    {
        $this->assertEquals(
            'this_is_a_test_response_this_is_a_test_with_an_array',
            $this
                ->__getReflectionMethod('_underscore')
                ->invoke($this->__getInstance(), [
                    'This is a-test.response',
                    'This-is-A.test with.an ArrAy'
                ])
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_isFile
     * Check if file exists
     */
    public function testIsFile()
    {
        $this->assertTrue(
            $this->__getReflectionMethod('_isFile')->invoke(
                $this->__getInstance(),
                __FILE__
            )
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::isAdmin
     * Test if method is only responding to admin pages
     * @todo write test
     */
    public function testIsAdmin()
    {
        $this->assertFalse(
            true,
            false
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::getPage
     * Test if page is retrievable by null
     */
    public function testGetPageByNull()
    {
        $this->assertInstanceOf(
            \Processwire\Page::class,
            $this->__getReflectionMethod('getPage')->invoke(
                $this->__getInstance(),
                null
            )
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::getPage
     * Test if page is retrievable by ID
     */
    public function testGetPageById()
    {
        $this->assertInstanceOf(
            \Processwire\Page::class,
            $this->__getReflectionMethod('getPage')->invoke(
                $this->__getInstance(),
                1
            )
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::getPage
     * Test if page is retrievable by url path
     */
    public function testGetPageByUrlPath()
    {
        $this->assertInstanceOf(
            \Processwire\Page::class,
            $this->__getReflectionMethod('getPage')->invoke(
                $this->__getInstance(),
                '/'
            )
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::getModuleConfigInputfields
     * Test if method returns instance of \Processwire\InputfieldWrapper
     */
    public function testGetModuleConfigInputfieldsOnInstance()
    {
        $this->assertInstanceOf(
            \ProcessWire\InputfieldWrapper::class,
            $this->__getReflectionMethod('getModuleConfigInputfields')->invoke($this->__getInstance())
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::getModuleConfigInputfields
     * Test if method returns required fields
     */
    public function testGetModuleConfigInputfieldsOnRequiredFields()
    {
        $this->assertInstanceOf(
            \ProcessWire\InputfieldText::class,
            $this->__getReflectionMethod('getModuleConfigInputfields')
                ->invoke($this->__getInstance())
                ->get(\ProcessWire\KeyAgencyGeneral::OPTION_SITE_TITLE)
        );
        $this->assertInstanceOf(
            \ProcessWire\InputfieldText::class,
            $this->__getReflectionMethod('getModuleConfigInputfields')
                ->invoke($this->__getInstance())
                ->get(\ProcessWire\KeyAgencyGeneral::OPTION_SEO_DESCRIPTION)
        );
        $this->assertInstanceOf(
            \ProcessWire\InputfieldText::class,
            $this->__getReflectionMethod('getModuleConfigInputfields')
                ->invoke($this->__getInstance())
                ->get(\ProcessWire\KeyAgencyGeneral::OPTION_SEO_KEYWORDS)
        );
        $this->assertInstanceOf(
            \ProcessWire\InputfieldCheckbox::class,
            $this->__getReflectionMethod('getModuleConfigInputfields')
                ->invoke($this->__getInstance())
                ->get(\ProcessWire\KeyAgencyGeneral::OPTION_PRODUCT_MAIN_NAVIGATION_CATEGORIES)
        );
        $this->assertInstanceOf(
            \ProcessWire\InputfieldText::class,
            $this->__getReflectionMethod('getModuleConfigInputfields')
                ->invoke($this->__getInstance())
                ->get(\ProcessWire\KeyAgencyGeneral::OPTION_SITE_TITLE)
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::getDisplayOptions
     * Test if display options does return an array
     */
    public function testGetDisplayOptionsForTypeArray()
    {
        $this->assertInternalType(
            'array',
            $this->__getReflectionMethod('getDisplayOptions')->invoke(
                $this->__getInstance()
            )
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::getModuleInfo
     * Test array for correct keys
     */
    public function testGetDisplayOptionsContainsRequiredKeys()
    {
        $result = $this->__getReflectionMethod('getDisplayOptions')->invoke(
            $this->__getInstance()
        );

        $this->assertArrayHasKey(1, $result);
        $this->assertArrayHasKey(2, $result);
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_isInstalled
     * Test if method returns boolean
     */
    public function testIsInstalled()
    {
        $this->assertInternalType(
            'bool',
            $this->__getReflectionMethod('_isInstalled')->invoke(
                $this->__getInstance(),
                'KeyAgencyGeneral'
            )
        );
        $this->assertInternalType(
            'bool',
            $this->__getReflectionMethod('_isInstalled')->invoke(
                $this->__getInstance(),
                'nonexistingmodule'
            )
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral::_getCurrencyOptions
     * Check if currency options is returning an array
     */
    public function testGetCurrencyOptionsIsArray()
    {
        $mock = $this->getMockBuilder(\ProcessWire\KeyAgencyGeneral::class)
            ->setMethods([
                '_isInstalled'
            ])
            ->getMock();

        $mock// set mock method to return always false and to be called 2 times
        ->expects($this->exactly(2))
            ->method('_isInstalled')
            ->willReturn(false);

        // create reflection class to make private method accessible
        $reflectionClass = new ReflectionClass($mock);
        $reflectionMethod = $reflectionClass->getMethod('_getCurrencyOptions');
        $reflectionMethod->setAccessible(true);

        $this->assertInternalType(
            'array',
            $reflectionMethod->invoke(
                $mock
            )
        );

        $mock// set mock method to return always true
        ->method('_isInstalled')
            ->willReturn(true);

        $this->assertInternalType(
            'array',
            $reflectionMethod->invoke(
                $mock
            )
        );
    }
}

folders/classTest.php

<?php
/**
 * Created by PhpStorm.
 * User: chris
 * Date: 16-03-17
 * Time: 10:40
 */
use PHPUnit\Framework\TestCase;

/**
 * Class KeyAgencyGeneral_Helper_AbstractTest
 */
class KeyAgencyGeneral_Helper_AbstractTest
    extends TestCase
{
    /**
     * Get instance of module KeyAgencyGeneral_Helper_Abstract
     *
     * @param bool $reflection Return reflection class when set to true
     * @return \ProcessWire\KeyAgencyGeneral_Helper_Abstract|ReflectionClass
     */
    private function __getInstance($reflection = false)
    {
        if ($reflection) {
            return new ReflectionClass(\ProcessWire\KeyAgencyGeneral_Helper_Abstract::class);
        }
        return new \ProcessWire\KeyAgencyGeneral_Helper_Abstract();
    }

    /**
     * Get method from reflection class
     *
     * @param $method
     * @return ReflectionMethod
     */
    private function __getReflectionMethod($method)
    {
        $method = $this
            ->__getInstance(true)
            ->getMethod($method);
        $method->setAccessible(true);

        return $method;
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral_Helper_Abstract::_getModule
     * Check for correct module instance
     */
    public function testGetModule()
    {
        $this->assertInstanceOf(
            \ProcessWire\KeyAgencyGeneral::class,
            $this->__getReflectionMethod('_getModule')->invoke(
                $this->__getInstance()
            )
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral_Helper_Abstract::getFile
     * Test for file content (string)
     */
    public function testGetFileReturnsStringWhenFileExists()
    {
        $this->assertInternalType(
            'string',
            $this->__getInstance()->getFile('KeyAgencyGeneral/image')
        );
    }

    /**
     * Test for: \ProcessWire\KeyAgencyGeneral_Helper_Abstract::getFile
     * Test for file content (string)
     */
    public function testGetFileReturnsStringWhenFileDoesNotExist()
    {
        $this->assertInternalType(
            'string',
            $this->__getInstance()->getFile('ThisDoesNot/exist')
        );
    }
}

2 个答案:

答案 0 :(得分:0)

你有

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/xml'));

这是您在此目录中的文件吗?

答案 1 :(得分:0)

哦,我明白了,显然我不应该使用Tests/*而只是Tests

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
        strict="true"
        bootstrap="./Tests/Bootstrap.php"
>
    <testsuites>
        <testsuite name="unit">
            <directory>Tests</directory>
        </testsuite>
    </testsuites>
    <logging>
        <log type="testdox-html" target="Tests/results.html"/>
    </logging>
    <filter>
        <blacklist>
            <directory suffix=".php">vendor</directory>
        </blacklist>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">Tests/</directory>
        </whitelist>
    </filter>
</phpunit>