>백엔드 개발 >Golang >주장: 모의: 메서드 호출이 예기치 않게 발생했기 때문에 무엇을 반환해야 할지 모르겠습니다. Go에서 단위 테스트를 작성하는 동안 오류가 발생했습니다.

주장: 모의: 메서드 호출이 예기치 않게 발생했기 때문에 무엇을 반환해야 할지 모르겠습니다. Go에서 단위 테스트를 작성하는 동안 오류가 발생했습니다.

王林
王林앞으로
2024-02-10 09:00:18520검색

断言:模拟:我不知道要返回什么,因为方法调用是意外的 在 Go 中编写单元测试时出错

이 기사에서는 PHP 편집기 Xiaoxin이 Go 언어로 단위 테스트를 작성할 때 발생하는 일반적인 오류, 즉 어설션 오류를 소개합니다. 단위 테스트를 작성할 때 반환 값을 결정할 수 없는 상황이 발생하는 경우가 있는데, 이로 인해 예기치 않은 메서드 호출 오류가 발생할 수 있습니다. 이 기사에서는 어설션 오류를 더 잘 처리하고 단위 테스트의 정확성과 신뢰성을 보장하는 데 도움이 되는 이 문제의 원인과 해결 방법에 대해 논의합니다.

질문 내용

go에서 testify를 사용하여 내 서비스 메서드에 대한 단위 테스트를 작성하고 있는데 업데이트 메서드를 제외한 모든 메서드가 잘 작동합니다. 업데이트 메서드에서는 업데이트 메서드에서 동일한 서비스의 다른 메서드를 호출하기 때문입니다(" getbyid") .

내 서비스에 업데이트 방법 구현:

으아악

mockrepo 업데이트 방법:

으아악

테스트 구현:

으아악

이제 테스트를 실행하면 다음 오류가 발생합니다.

으아악

테스트 함수 구현에서 mock.on("getbyid") 호출 전후에 .on("update") 호출을 시도했지만 작동하지 않고 또한 mockrepo 업데이트 기능을 수정했지만 작동하지 않았습니다. .on("update") 之前和之后调用 mock.on("getbyid") ,但它不起作用,而且我还修改了mockrepo update函数,但它没用。

解决方法

让我尝试帮助您解决问题。我通过一些简化复制了该存储库,只是为了发布相关代码。如果我在您的解决方案中没有错,有一个服务(teamservice)调用底层包(teamrepo)提供的一些方法。您想测试 teamservice 结构的 update

Solution

repo/repo.go문제 해결을 도와드리겠습니다. 관련 코드를 게시하기 위해 몇 가지 단순화를 통해 저장소를 복사했습니다. 귀하의 솔루션이 틀리지 않다면 기본 패키지(teamrepo)에서 제공하는 일부 메서드를 호출하는 서비스(teamservice)가 있습니다. teamservice 구조의 update 메서드를 테스트하려고 합니다. 검토한 후 먼저 코드를 보여주고 각 파일에 대해 설명하겠습니다.

getbyidupdate

으아악

이 파일에서 시뮬레이션할 방법을 찾을 수 있습니다. 방법은 다음과 같습니다. services/service.go. 분명히 이것은 실제 코드는 아니지만 지금은 중요하지 않습니다.

sut)。通过依赖注入,我们将利用通过接口 teamrepointerface 注入的 repo

으아악

여기서 테스트 코드에서 테스트 중인 시스템이 될 서비스(services/service_test.go 패키지에서 제공하는 기능)를 볼 수 있습니다.

으아악

코드에서 무슨 일이 일어나고 있는지 더 자세히 설명하는 몇 가지 주석을 찾을 수 있습니다. 짐작할 수 있듯이 문제는 다음 호출이 코드에 없다는 것입니다. repomock.on("getbyid", 1).return(repo.team{id: 1, teamownerid: 1, 姓名: "test"}, nil).times(1)


내 솔루션을 실행하면 귀하에게도 효과가 있을 것입니다. 🎜 문제가 해결되었거나 다른 문의사항이 있으면 알려주시기 바랍니다. 🎜

위 내용은 주장: 모의: 메서드 호출이 예기치 않게 발생했기 때문에 무엇을 반환해야 할지 모르겠습니다. Go에서 단위 테스트를 작성하는 동안 오류가 발생했습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제