我试图弄清楚是否可以使用Delphi中的"隐式"类运算符初始化包含动态数组的记录(柏林10.1 upd 1)
附加的程序产生以下输出:
ci iA r1 r2 r3
1 1 1 1 49694764491115752
2 2 2 2 11570520
3 3 3 3 0
4 4 4 4 0
5 5 5 5 0
Run Code Online (Sandbox Code Playgroud)
从输出中可以看出,前两个赋值(r1,r2),使用常量按预期工作.第三个赋值r3 := iArray被编译器接受,但结果被破坏了.调试器显示vin 的值TRec.Implicit已经错误.
这里出了什么问题?这有可能吗?
program Project5;
{$APPTYPE CONSOLE}
{$R *.res}
type
TRec = record
iArray: array of UInt64;
class operator Implicit(const v: array of UInt64): TRec;
end;
{ TRec }
class …Run Code Online (Sandbox Code Playgroud) 我正在尝试在运行测试后检查对象的状态.该状态包含在一组中.是否可以使用DUnitX属性将预期状态传递给测试用例,以便我可以对所有不同的输入使用相同的测试?
我试图将集合作为常量或集合传递,但在我的测试例程中,它总是以空集的形式到达.
示例代码:
type
TResult = (resOK,resWarn,resError);
TResultSet = set of TResult;
const
cErrWarn : TResultSet = [resWarn];
type
[TestFixture]
TMyTest = class(TBaseTest)
[Test]
[TestCase('Demo1','InputA,[resWarn]')] // <-- tried as a set
[TestCase('Demo2','InputB,cErrWarn')] // <-- tried as a constant
procedure Test(Input:string; ExpectedResult: TResultSet);
end;
procedure TMyTest.Test(Input:string; ExpectedResult: TResultSet);
begin
// ExpectedResult is always the empty set []
RunTests(MyObject(Input));
Assert.AreEqual(ExpectedResult, MyObject.ResultSet);
end;
Run Code Online (Sandbox Code Playgroud)
我还试图将Expected结果定义为数组,但是DUnitX甚至不再调用测试.可能那只是"太多"
procedure Test(Input:string; ExpectedResult: array of TResult);
Run Code Online (Sandbox Code Playgroud)
到目前为止我能想出的最好的方法是使用以下方法.获取最多三个样本(在此处插入您喜欢的整数...)预期状态并单独检查这些状态.这并不是我所希望的,但它确实可以解决问题.
procedure Test(Input:string; R1,R2,R3: TResult);
Run Code Online (Sandbox Code Playgroud)
非常感谢帮助.:)
Delphi应用程序网络共享管理器保留2020-2039范围内的20个端口,以启动其通信线程.我想知道当第21个应用程序在同一台计算机上启动时会发生什么.事实证明,这个应用程序只是挂起无响应,直到它被杀死,我还没有找到一种方法来优雅地终止它.
要重现,只需将TTetheringManager和TTetheringProfile放在空表单上,将配置文件连接到Manager,编译,在IDE外部启动应用程序20次,最后在IDE中启动第21个实例.
这是我到目前为止所发现的:
在System.Tether.NetworkAdapter:procedure TTetheringNetworkManagerCommunicationThread.Execute ; 一个ETetheringException.Create(SManagerNetworkCreation)时,无论是TCP或UDP的通信服务器不能启动被升高.到现在为止还挺好.
此异常显示在调试器中.当我继续并逐步执行以下代码时,应用程序最终挂起在System:function AcquireExceptionObject中,并且永远不会返回.
由于在Application.Run期间引发了应用程序,我试图通过以下方式捕获异常:
try
Application.Run;
except
ShowMessage('Something went terribly wrong!');
end;
Run Code Online (Sandbox Code Playgroud)
但这没用.有关我如何捕获(或阻止)此异常的任何建议?
delphi ×3
arrays ×1
delphi-xe8 ×1
dunitx ×1
dynamic ×1
exception ×1
record ×1
tethering ×1
unit-testing ×1