Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
170 views
in Technique[技术] by (71.8m points)

phpspec test logic in constructor

I have a logic like this

 public function __construct(DataFetcherInterface $fetcher, Alert $alert) {
   $this->data = $fetcher->getData();
   foreach($this->data as $info) {
       try {
           $fetcher->assoicateAddress($info);
       } catch (Exception $e) {
           $alert->sendAlert($info)
       }
   }
}

and I want to test logic here, for example if sendAlert() will be called in case of exception.

    public function it_should_throw_exception(
        DataFetcherInterface $fetcher,
        Alert $alert
    ): void {
        $fetcher->getData()->willReturn(
        // data here
        )->shouldBeCalled();
        
        $fetcher->assoicateAddress(
        // data here
       )->willThrow(Excpetion::class)->shouldBeCalled();

        $alert->sendAlert()->shouldBeCalled(
        // data here
       );

        $this->beConstructedWith($fetcher, $logger); // <== not sure how to do it here
    }

and it's not working, error:

 - it should throw exception
      some predictions failed:
      DataFetcherInterfaceP3:
        No calls have been made that match:
            DataFetcherInterfaceP3->getData()
          but expected at least one.

I know php spec is for TDD, and I should start from tests, but at the moment I start adding tests I already had some come, for new code I'll use TDD approach.

Is it a bad practice to have such logic in constructor?? I have other methods in the class as well, but I want it to be instantiated with all needed data, and I'm using Visitor pattern to get all data while initializing object

question from:https://stackoverflow.com/questions/65849005/phpspec-test-logic-in-constructor

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...