LaravelでphpUnitを書いています。
最初にsetUp()でDB関係のクラスをnewしてクラス変数を作って、
$this->drinkRepository = new DrinkRepository();
$lastId = $this->drinkRepository->all()->last()->id;
を一つにまとめたいのですが、setUp()を追加してもコンパイルエラーに失敗して困ってます。
詳しい方、よろしくお願いします。
##ソースコード
<?php declare(strict_types=1); namespace Tests\Unit\Services\Drink; use App\Exceptions\Drink\Buy\GuiltyException; use App\Exceptions\Drink\Buy\NoStockException; use App\Exceptions\Drink\Buy\NotEnoughMoneyException; use App\Exceptions\Drink\NotFoundException; use App\Models\User; use App\Services\Drink\DrinkService; use App\Models\Drink; use App\Repositories\DrinkRepository; use App\Repositories\UserRepository; use Tests\TestCase; class DrinkServiceBuyTest extends TestCase { /** * @testdox 在庫が0以下の場合, NoStockExceptionをスロー * @throws NotFoundException */ public function test_buy_should_throws_no_stock_exception_if_stock_0_or_less(): void { $this->expectException(NoStockException::class);//期待する例外 $this->drinkRepository = new DrinkRepository();//外だしして各メソッドの無駄を無くしたい $lastId = $this->drinkRepository->all()->last()->id;//外だしして各メソッドの無駄を無くしたい $this->drinkRepository->newDrink( new Drink($lastId+1, "テストドリンク", 100, 0, false)//テストデータ挿入 ); $user = new User(1, 'テストユーザー', 20, 100); (new DrinkService())->buy($user, $lastId+1); } /** * @testdox 返り値がnullだった場合, NotFoundExceptionをスロー * @throws NotFoundException */ public function test_buy_should_throws_not_found_exception_if_no_selected_drink(): void { $this->expectException(NotFoundException::class);//期待する例外 $this->drinkRepository = new DrinkRepository(); $lastId = $this->drinkRepository->all()->last()->id; $this->drinkRepository->newDrink( new Drink($lastId+1, "テストドリンク", 100, 1, false)//テストデータ挿入 ); $user = new User(1, 'テストユーザー', 20, 100); (new DrinkService())->buy($user, $lastId+2); } /** * @testdox 所持金がドリンクの値段を下回っていた場合, NotEnoughMoneyExceptionをスロー * @throws NotEnoughMoneyException */ public function test_buy_should_throws_not_enough_money_exception_if_not_enough_money(): void { $this->expectException(NotEnoughMoneyException::class);//期待する例外 $this->drinkRepository = new DrinkRepository(); $lastId = $this->drinkRepository->all()->last()->id; $this->drinkRepository->newDrink( new Drink($lastId+1, "テストドリンク", 100, 1, false)//テストデータ挿入 ); $user = new User(1, 'テストユーザー', 20, 99); (new DrinkService())->buy($user, $lastId+1); } /** * @testdox 20歳未満のユーザーがアルコール飲料を購入しようとした場合, GuiltyExceptionをスロー * @throws GuiltyException */ public function test_buy_should_throws_guilty_exception_if_guilty_purchase(): void { $this->expectException(GuiltyException::class);//期待する例外 $this->drinkRepository = new DrinkRepository(); $lastId = $this->drinkRepository->all()->last()->id; $this->drinkRepository->newDrink( new Drink($lastId+1, "テストドリンク", 100, 1, true)//テストデータ挿入 ); $user = new User(1, 'テストユーザー', 19, 100); (new DrinkService())->buy($user, $lastId+1); } /** * @testdox どの例外もスルーされなかった場合, 正常に購入された結果をDrinkBoughtResultとして返す * @throws GuiltyException */ public function test_buy_correctly(): void { $this->drinkRepository = new DrinkRepository(); $lastId = $this->drinkRepository->all()->last()->id; $this->drinkRepository->newDrink( new Drink($lastId+1, "テストドリンク", 100, 2, true)//テストデータ挿入 ); $user = new User(1, 'テストユーザー', 20, 2000); $result = (new DrinkService())->buy($user, $lastId+1); $this->assertEquals($result->drink->stock, 1); $this->assertEquals($result->user->wallet, 1900); } /** * @testdox テストデータ削除 */ public function tearDown():void { $this->drinkRepository = new DrinkRepository(); $lastId = $this->drinkRepository->all()->last()->id; $this->drinkRepository->deleteDrink($lastId); } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。