Unit Test 관련해서 질문 드립니다.

처음으로 xunit 을 이용해서 유닛 테스트를 만들어 보려고 합니다.

지금까지 제가 찾은 정보는 솔루션 폴더에서 dotnet test 라고 커맨드를 입력 하면
unit test 가 실행 되는 건데요.

거기서 실패한 내용이 (일부로 Exception throw 했습니다.)

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.19]     UnitTest.UnitTest1.Test2 [FAIL]
  Failed UnitTest.UnitTest1.Test2 [2 ms]
  Error Message:
   System.Exception : as
  Stack Trace:
     at UnitTest.UnitTest1.Test2() in /mnt/d/Source/Sample/UnitTest/UnitTest1.cs:line 13
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

Failed!  - Failed:     1, Passed:     1, Skipped:     0, Total:     2, Duration: 4 ms - UnitTest.dll (net8.0)

이런 식으로 나오는데

혹시 실패 결과를 좀 더 정형화 된 데이터로 받을수는 없을까요?

저걸 일일이 파싱하는건 말이 안되는거 같고 뭔가 방법이 있을듯 한데

혹시 관련된 링크라도 아시면 공유 부탁 드립니다.

꾸벅!

1개의 좋아요

어떤식으로 쓰려고 하는지가 빠져서 첨언 드리면
빌드 서버(리눅스)에서 새벽마다 자동으로 테스트를 실행 하여
에러가 발생 하면 자동으로 메일 보내는 시스템을 구축 하려 합니다.
smtp 는 이미 있어서 테스트 결과만 정형화 되서 나오면
구현이 가능 할듯 한데 구글링 해봐도 찾이가 어렵네요…

1개의 좋아요

정형화 해서 받을 수 있는데… 바퀴의 재발명이 될 거 같군요.

감사합니다. 한번 분석해 보겠습니다.

의도가 무엇인지 명확하지 않은 것 같아서 질문 드립니다.

빌드 서버는 개발중인 코드를 빌드하는 개발 컴퓨터를 말하는 것인가요?
아니면, 배포된 코드를 운영하는 컴퓨터를 말하는 것인가요?

개발 코드 입니다. 메인 프로젝트는 WPF 고요.

스타트업이라 QA인원도 없는데

항상 기능 하나 수정하면 사이드가 터져서

데일리로 빌드 및 유닛테스트 하는 서버를 구축할까 합니다.

2개의 좋아요

이 것이 테스트를 사용하는 목적입니다.

개발을 진행하면서, 테스트 프로젝트에는 테스트 케이스가 쌓일 것입니다.

새로운 기능을 추가할 때, 그 기능에 대한 테스트를 추가하고, 전체 테스트를 실행해야 합니다.
테스트 프로젝트는 새로운 기능이 기존의 기능과 충돌하는 부분이 있다면, 그 케이스를 fail 로 확인시켜 줍니다.

그 충돌난 부분을 없앤 후에라야, 새로운 기능은 앱 코드에 추가될 수 있습니다.
git으로 코드를 관리한다면, 커밋할 수 있는 상태가 되는 것이죠.

이렇게 누적된 코드는 언제나 신뢰성을 갖게 되는 것이고, 이것이 TDD가 추구하는 바입니다.

결론적으로 새벽에 테스트를 진행하는 것은 의미가 없다고 볼 수 있습니다.
구현 시의 테스트 결과와 새벽 테스트 결과는 하등 달라지는 점이 없기 때문입니다.
또한, 구현 시 수행해야 할 테스트를 그 다음 날 새벽까지 미룰 이유도 없는 것이죠.

1개의 좋아요

자금 여유가 된다면 DevOps 서비스를 이용하는 것을 추천드려요.
(Azure DevOps 나 팀시티 같은…)

사실 상 데일리 빌드는 특정 마일스톤을 바이너리로 뽑아서 보관하거나
그 바이너리를 QA 대상으로 삼는 용도가 되니까
굳이 밤에 실행할 필요는 없을 거 같긴하네요.

그것보다는 git 커밋 push or merge 하면 자동으로 빌드 돌아서 바이너리 뽑고
특정 릴리즈에 tag push 하면 배포되고… 뭐 이런 자동화 기능이
실제 개발 단계에서는 훨씬 유용하더라구요.

요런 걸 직접 개발하신다면…

저는 그냥 돈 주고 쓰겠슴다.
(물론 돈을 줘도 헤딩은 해야하지만… 좀 덜 한다는 거)

맨바닥부터 공부하면서 헤딩하면
실시간으로 머리털 줄어드는 경험을 하실 수 있어욤 =ㅅ=…



** 근데 WPF 가 메인인데 리눅스 빌드를?(.. 궁금..)
1개의 좋아요

아직 제대로 된 시스템은 구축 안되어 있는 상태에서
어디서 주워들은건 있어서 ci/cd 까지는 모르겠고
최소한 기능 개발하면서 등록한 테스트랑 버그 생겨서 등록한 테스트 정도만 검사를 하고 싶은데

푸시 할때마다 돌리는건 시간이 아까울거 같고
(푸시가 좀 빈번합니다.)
버전업 할때 돌리는건 fail 많이 나오고 하면
하루 종일 빌드데이(수정 테스트 반복) 될거 같아서
적어도 매일 돌리면 조금은 중간점을 찾을수 있지 않을까 싶어서 생각한 방법입니다.

리눅스 쓰는건 저희가 로그인방식(saas?) 이라
사내에 센트 기반 rest 서버가 있어서
그걸 활용하려 합니다.
그걸 안쓰면 별도 pc 구축하거나 개발자 pc에서 돌려야 되서요