Delphi의 단위 테스트-어떻게하고 있습니까?
여기에있는 소수의 Delphi 사용자가 단위 테스트를 수행하는 방법이 궁금합니다. 잘 작동하는 IDE와 통합되는 것이 있습니까? 그렇지 않다면, 어떤 도구를 사용하고 있으며 모든 작동 방식을 보여주는 예제 미니 프로젝트가 있거나 알고 있습니까?
최신 정보:
BDS 2006 Pro를 사용하고 있다는 것을 언급하는 것을 잊었습니다. 가끔 Delphi 7을 사용하고 있으며 물론 다른 사람들이 다른 버전을 사용하고있을 수도 있습니다.
DUnit 은 win32 Delphi와 함께 사용되는 xUnit 유형의 단위 테스트 프레임 워크입니다. Delphi 2005 이후 DUnit은 IDE의 인증 지점에 통합되었습니다. Delphi IDE 용 다른 DUnit 통합 도구는 여기 에서 찾을 수 있습니다 . DUnit은 예제 가있는 문서와 함께 제공됩니다 .
DUnit에 대한 몇 가지 추가 기능이 있습니다. 아마도 이것은 SO에 대한 새로운 항목의 가치가 있습니다. 지금 목록에 올릴 수있는 두 가지는
- FastMM4 통합 : 단위 테스트는 자동으로 메모리 누수 (및 기타 사항)를 감지하고 DUnit 9.3 이상에서 작동합니다.
- OpenCTF 는 DUnit을 기반으로 한 '컴포넌트 테스트 프레임 워크'로, 프로젝트의 양식, 프레임 및 데이터 모듈에있는 모든 컴포넌트에 대해 동적으로 테스트를 생성하고 사용자 지정 규칙 (오픈 소스)을 사용하여 테스트합니다.
SynCommons 오픈 소스 유닛 에서 사용할 수있는 유닛 테스트 클래스를 살펴볼 수 있습니다 . 모든 회귀 테스트를 위해 오픈 소스 프레임 워크에서 사용됩니다. 아마도 최고는 아니지만 살펴볼 가치가 있습니다.
http://blog.synopse.info/post/2010/07/23/Unit-Testing-light-in-Delphi 참조
단위 테스트를 구현하려면 다음과 같은 클래스를 만들어 새 테스트 케이스를 선언하기 만하면됩니다.
type
TTestNumbersAdding = class(TSynTestCase)
published
procedure TestIntegerAdd;
procedure TestDoubleAdd;
end;
procedure TTestNumbersAdding.TestDoubleAdd;
var A,B: double;
i: integer;
begin
for i := 1 to 1000 do
begin
A := Random;
B := Random;
CheckSame(A+B,Adding(A,B));
end;
end;
그런 다음 테스트 슈트를 만들고 실행합니다.
최신 1.13 버전에는 MadExcept와 마찬가지로 .map 파일 콘텐츠를 소스로 사용하는 발생 된 예외 등의 스택 추적이 포함 된 새로운 로깅 메커니즘이 있습니다.
이제 단위 테스트 클래스에서 사용되므로 오류가 발생하면 소스 줄과 스택 추적이있는 로그에 항목이 생성됩니다.
C:\Dev\lib\SQLite3\exe\TestSQL3.exe 0.0.0.0 (2011-04-13)
Host=Laptop User=MyName CPU=2*0-15-1027 OS=2.3=5.1.2600 Wow64=0 Freq=3579545
TSynLogTest 1.13 2011-04-13 05:40:25
20110413 05402559 fail TTestLowLevelCommon(00B31D70) Low level common: TDynArray "" stack trace 0002FE0B SynCommons.TDynArray.Init (15148) 00036736 SynCommons.Test64K (18206) 0003682F SynCommons.TTestLowLevelCommon._TDynArray (18214) 000E9C94 TestSQL3 (163)
로깅이없는 테스트 슈트와 로깅이있는 테스트 슈트의 차이점은 다음과 같습니다.
procedure TSynTestsLogged.Failed(const msg: string; aTest: TSynTestCase);
begin
inherited;
with TestCase[fCurrentMethod] do
fLogFile.Log(sllFail,'%: % "%"',
[Ident,TestName[fCurrentMethodIndex],msg],aTest);
end;
로깅 메커니즘은 단순히 테스트를 기록하는 것 이상을 수행 할 수 있습니다. 메서드의 재귀 호출을 기록하고, 로그에 표시 할 정보를 선택하고, 고객 측에서 애플리케이션을 프로파일 링하고, 게시 된 속성, TList 또는 TCollection 콘텐츠를 JSON으로 작성합니다. 로그 내용 등 ...
The first time the .map file is read, a .mab file is created, and will contain all symbol information needed. You can send the .mab file with the .exe to your client, or even embed its content to the .exe. This .mab file is optimized: a .map of 927,984 bytes compresses into a 71,943 .mab file.
So this unit could be recognized as the natural child of DUnit and MadExcept wedding, in pure OpenSource. :)
Additional information is available on our forum. Feel free to ask. Feedback and feature requests are welcome! Works from Delphi 6 up to XE.
DUnit2 is available from http://members.optusnet.com.au/~mcnabp/
DUnit2 is modified more regularly than the original dunit. It also works on Delphi 2009.
Try: http://sourceforge.net/projects/dunit2/ - it moved as the original author Peter McNab passed away several years ago. Still some activity on the dunit mailing list.
There's a new unit testing framework for modern Delphi versions in development: https://github.com/VSoftTechnologies/DUnitX
Usually I create a Unit test project (File->New->Other->Unit Test->Test Project). It contains the stuff I need so it's been good enough so far.
I use delphi 2007 so I don't really know if this is available in 2006.
We do unit testing of all logic code using DUnit and use the code coverage profiler included in AQTime to check that all paths through the code are executed by the tests.
We have two approaches, first we have Dunit tests that are run buy the developers - these make sure that the code that has just been changed still works as before. The other approach is to use CruiseControl.NET to build executables and then run the dunit tests everytime a change is made, to ensure that there are no unintended consequences of the change.
Much of our codebase has no tests, so the automatic tests are a case of continuous development in order to ensure our applications work as we think they should.
We tried to use DUnit with Delphi 5, but it didn't work well. Specially if you are implementing COM interfaces, we found many dependencies to setup all the test infrastructure. I don't know if the test support has improved in newer versions.
참고URL : https://stackoverflow.com/questions/18291/unit-testing-in-delphi-how-are-you-doing-it
'Programing' 카테고리의 다른 글
콘솔에서 자바 스크립트 함수 호출 (0) | 2020.12.05 |
---|---|
CSS에서 @media 규칙 중첩 (0) | 2020.12.05 |
CSS에서 1div가있는 겹치는 원 (0) | 2020.12.04 |
“git checkout-”. (0) | 2020.12.04 |
Java에서 tar 파일을 어떻게 추출합니까? (0) | 2020.12.04 |