在Delphi安装的文件中查找后,我找到了一个文件
"C:\ Program Files\Embarcadero\RAD Studio\7.0\ObjRepos\en\UnitTestFrameworks.xml"
此文件有许多部分用于设置选项,这些选项会影响由创建新测试用例单元时调用的测试用例向导生成的测试用例代码.大多数这些选项都是不言自明的,但看到一些文档会很棒.
特别是,我想:
添加第二个TestClassComment.
在向导的测试用例基类组合框中有多个选项.我可以通过更改UnitTestFrameworks.xml文件中的节点值来更改此列表中单个项目的值,但无法在列表中显示多个项目.
使用某些属性标记测试类和方法.
目前我只关注Delphi Win 32的个性.
我在这里走在正确的轨道上吗?文档可用或失败,是否有人有任何提示?
我想知道在dunit中测试异常的最佳做法是什么.我对Delphi中的方法指针不是很熟悉.是否有可能将参数绑定到方法指针,以便可以在没有参数的情况下调用它.目前我总是写一个额外的方法来手动执行"绑定".如果SUT有很多投掷方法,那将会很烦人.
// What i did before i knew abput CheckExcepion
procedure MyTest.MyMethod_BadInput_Throws;
var
res: Boolean;
begin
res := false;
try
sut.MyMethod('this is bad');
except
on e : MyExpectedException do:
res := true;
end;
CheckTrue(res);
end;
// What i do now
procedure MyTest.MyMethodWithBadInput;
begin
sut.MyMethod('this is bad');
end;
procedure MyTest.MyMethod_BadInput_Throws;
begin
CheckException(MyMethodWithBadInput, MyExpectedException);
end;
// this would be nice
procedure MyTest.MyMethod_BadInput_Throws;
begin
CheckException(
BindArguments(sut.MyMethod, 'this is bad'), // <-- how to do this
MyExpectedException);
end;
Run Code Online (Sandbox Code Playgroud) 有没有办法用DUnit测量代码覆盖率?或者是否有任何免费工具实现?你用的是什么?你通常会使用什么代码覆盖?
Jim McKeeth:谢谢你的详细解答.我说的是TDD方法意义上的单元测试,不仅仅是发生故障后的单元测试.我对一些基本的预写单元测试可以实现的代码覆盖感兴趣.
我正在使用DUnit来测试Delphi库.我有时会遇到一些情况,我会编写几个非常相似的测试来检查函数的多个输入.
有没有办法在DUnit中编写(类似的东西)参数化测试?例如,为适当的测试程序指定输入和预期输出,然后运行测试套件并获得有关多次运行测试失败的反馈?
(编辑:一个例子)
例如,假设我有两个这样的测试:
procedure TestMyCode_WithInput2_Returns4();
var
Sut: TMyClass;
Result: Integer;
begin
// Arrange:
Sut := TMyClass.Create;
// Act:
Result := sut.DoStuff(2);
// Assert
CheckEquals(4, Result);
end;
procedure TestMyCode_WithInput3_Returns9();
var
Sut: TMyClass;
Result: Integer;
begin
// Arrange:
Sut := TMyClass.Create;
// Act:
Result := sut.DoStuff(3);
// Assert
CheckEquals(9, Result);
end;
Run Code Online (Sandbox Code Playgroud)
我可能会有更多的这些测试做同样的事情,但有不同的输入和期望.我不想将它们合并到一个测试中,因为我希望它们能够独立通过或失败.
背景 我在一个由7名开发人员和2名测试人员组成的团队中工作,这些团队负责物流系统.我们使用Delphi 2007和模拟驱动开发与Bold for Delphi作为框架.该系统现已投入生产约7年,拥有约1,700万行代码.我们在4-5周后发布到生产,几乎每次发布后我们都要为我们没有找到的bug做一些补丁.这对我们和客户来说当然都很烦人.
当前测试 解决方案当然是更自动化的测试.目前我们有手动测试.一个Testdbgenerator,以空数据库开头,并从建模方法中添加数据.我们还有Testcomplete,它运行一些非常基本的脚本来测试GUI.缺乏时间阻止我们添加更多测试,但脚本对应用程序中的更改也很敏感.几年前我真的尝试用DUnit进行单元测试,但是几天后我放弃了.这些单位的联系太紧.
单元测试前提条件 我认为我知道单元测试的一些前提条件:
使用的框架 我们可能会升级到Delphi XE2,主要是因为64位编译器.我看了一下Spring,但这需要D2007的更新,现在不会发生.或许明年.
问题 大多数代码仍然没有自动测试.那么提高旧代码可测试性的最佳途径是什么?或者也许最好只开始为新方法编写测试?我不确定增加自动测试的最佳方法是什么,欢迎提出意见.我们现在可以使用D2007 + DUnit,然后轻松更改为Delphi XE2 + Spring吗?
编辑:关于手动测试的当前测试方法只是"敲打它并尝试打破它" 克里斯称之为.
我承认我几乎没有单元测试经验.我刚才尝试使用DUnit,但放弃了,因为我的应用程序中的类之间存在很多依赖关系.它是一个相当大的(大约150万个源代码行)Delphi应用程序,我们是一个维护它的团队.
现在的测试是由一个人在发布之前使用它并报告错误.我还在TestComplete 6中设置了一些GUI测试,但由于应用程序的更改,它经常失败.
Bold for Delphi用作数据库的持久性框架.我们都同意单元测试是要走的路,我们计划在DotNet中编写一个新的应用程序,ECO作为持久性框架.
我只是不知道从哪里开始进行单元测试...任何好书,网址,最佳实践等?
我有一个班级,我正在与DUnit进行单元测试.它有一些方法,一些公共方法和私有方法.
type
TAuth = class(TDataModule)
private
procedure PrivateMethod;
public
procedure PublicMethod;
end;
Run Code Online (Sandbox Code Playgroud)
为了为这个类编写单元测试,我必须公开所有的方法.
是否有一种不同的方式来声明私有方法,以便我仍然可以测试它们,但它们不公开?
在GUI测试运行器中,内存泄漏检查的菜单项处于非活动状态(变灰).是否有一个特殊的开关我还没有找到激活它们?
使用DUnit 9.4(来自Delphi 2009或来自sourceforge Subversion存储库)和FastMM4.92
目前我在DUnit中使用2级测试层次结构(测试项目 - >测试用例 - >测试方法;参见下面的示例).是否有可能引入第三级甚至更多级别?

当FreeOnTerminate = True时,为TThread后代编写Delphi DUnit测试的最佳方法是什么?TThread后代返回一个我需要测试的引用,但我无法弄清楚如何等待线程在测试中完成...
unit uThreadTests;
interface
uses
Classes, TestFramework;
type
TMyThread = class(TThread)
strict private
FId: Integer;
protected
procedure Execute; override;
public
constructor Create(AId: Integer);
property Id: Integer read FId;
end;
TestTMyThread = class(TTestCase)
strict private
FMyId: Integer;
procedure OnThreadTerminate(Sender: TObject);
protected
procedure SetUp; override;
procedure TearDown; override;
published
procedure TestMyThread;
end;
implementation
{ TMyThread }
constructor TMyThread.Create(AId: Integer);
begin
FreeOnTerminate := True;
FId := AId;
inherited Create(False);
end;
procedure TMyThread.Execute;
begin
inherited;
FId := FId + 1;
end; …Run Code Online (Sandbox Code Playgroud) delphi ×10
dunit ×10
unit-testing ×6
bold-delphi ×1
delphi-2007 ×1
delphi-2010 ×1
delphi-xe ×1
exception ×1
fastmm ×1
memory-leaks ×1
tthread ×1