テスト結果が表示されない

247 views
Skip to first unread message

田中宏典

unread,
Oct 16, 2016, 7:44:14 PM10/16/16
to 日本Symfonyユーザー会

PHPUnitを使ってテストをしているのですが、CSV作成のテストをモックオブジェクト使ってやろうとしたらテスト結果が出ません。

他のテストでは「Tests: 2, Assertions: 6, Warnings: 1.」などとテスト結果が出るのですが、このテストの時だけ結果が出ずに、メッセージがWarningとしか出ないのでどうすればいいのかがわからないです。

この場合はコーディングミスが原因なのでしょうか?


■環境

Symfony version 3.1.4

PHPUnit 5.6.1


■コンソール

$ php phpunit.phar -c ./ --debug

PHPUnit 5.6.1 by Sebastian Bergmann and contributors.

Starting test 'Warning'.

W

Starting test 'Doctrine\Common\Collections\ArrayCollection\InquiryCsvBuilderTest::CSVが正しく作られること'.


$ php phpunit.phar -c ./ --tap

TAP version 13

not ok 1 - Warning: Warning


■テストコード
<?php
namespace AppBundle\Service\Csv;
namespace AppBundle\Entity\Inquiry;
namespace AppBundle\Entity\InquiryRepository;
namespace Doctrine\Common\Collections\ArrayCollection;

class InquiryCsvBuilderTest extends \PHPUnit_Framework_TestCase
{
    /**
     * @var InquiryCsvBuilder
     */
    private $SUT;

    /**
     * @var InquiryRepository
     */
    private $inquiryRepository;

    /**
     * @test
     */
    public function CSVが正しく作られること()
    {
        $inquiry1 = new Inquiry();
        $inquiry1->setId(1);
        $inquiry1->setName('テストあいうえお');
        $inquiry1->setEmail('a...@example.com');
        $inquiry2 = new Inquiry();
        $inquiry2->setId(2);
        $inquiry2->setName('テストかきく けこ');
        $inquiry2->setEmail('ke...@example.com');
        $inquiryCollection = new ArrayCollection([$inquiry1, $inquiry2]);
        $this->inquiryRepository->expects($this->once())
            ->method('findAllByKeyword')
            ->willReturn($inquiryCollection);

        $result = $this->SUT->build('テスト');

        $expected = '1,テストあいうえお,a...@example.com' . "\r\n" .
                    '2,"テストかきく けこ",ke...@example.com' . "\r\n";

        $this->assertThat($result, $this->equalTo($expected));
    }

    protected function setUp()
    {
        $this->inquiryRepository = $this->getMockBuilder(InquiryRepository::class)
            ->disableOriginalConstructor()
            ->getMock();

        $this->SUT =
            new InquiryCsvBuilder('UTF-8', $this->inquiryRepository);
    }
}

Hidenori GOTO

unread,
Oct 17, 2016, 9:18:54 AM10/17/16
to symfony-...@googlegroups.com
田中さん

後藤です

テストコードの先頭にあたりに namespace 行は書かれていないでしょうか?
namespace指定がないので、テスト対象の InquiryCsvBuilder クラスを見つけられない、という動作になっているように思われます。
---------------------------------------------------------------
後藤秀宣
hideno...@gmail.com
---------------------------------------------------------------


2016年10月17日 8:44 田中宏典 <toebisu...@gmail.com>:
> --
> --
> -------------------
> Symfonyに関する疑問・質問、ユーザー会の活動やサイトに対するご意見、その他雑談など、お気軽にMLへ投稿してください!
>
>
> 日本Symfonyユーザー会
> http://www.symfony.gr.jp/
>
> 日本Symfonyユーザー会メーリングリスト
> http://groups.google.com/group/symfony-users-ja
>
> ---
> このメールは Google グループのグループ「日本Symfonyユーザー会」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
> symfony-users-...@googlegroups.com にメールを送信してください。
> その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

田中宏典

unread,
Oct 17, 2016, 7:19:55 PM10/17/16
to 日本Symfonyユーザー会
後藤さん、
ご返信ありがとうございます。

テスト対象の InquiryCsvBuilder は AppBundle\Service\Csv にあり、テストコードの先頭に namespace 指定しております。
試しに namespace AppBundle\Service\Csv\InquiryCsvBuilder; を追記しても状況変わりませんでした。

Hidenori GOTO

unread,
Oct 17, 2016, 9:13:02 PM10/17/16
to symfony-...@googlegroups.com
田中さん

後藤です

元の投稿されたコードをよく見たら


■テストコード
<?php
namespace AppBundle\Service\Csv;
namespace AppBundle\Entity\Inquiry;
namespace AppBundle\Entity\InquiryRepository;
namespace Doctrine\Common\Collections\ArrayCollection;

のように書かれていますが、これの最初の1行以外は use 〜 の間違いということですかね。

namespaceが複数回記述されていて、最後の記述がそれ以降のクラスに対して有効になっている(Doctrine\Common\Collections\ArrayCollectionという名前空間に所属した状態になる)という状況かと思います。


---------------------------------------------------------------
後藤秀宣
hideno...@gmail.com
---------------------------------------------------------------


2016年10月18日 8:19 田中宏典 <toebisu...@gmail.com>:

田中宏典

unread,
Oct 17, 2016, 9:22:09 PM10/17/16
to 日本Symfonyユーザー会
後藤さん、
ありがとうございます!

ほんとですね、namespaceをuseと勘違いしていました。
こういう間違いって恥ずかしいですけど、エラーメッセージからはわかりにくいので助かりました。

修正することで解決しました。

Reply all
Reply to author
Forward
0 new messages