nulltests.~pas
来自「DELPHI 访问SQLITE3 数据库的VCL控件」· ~PAS 代码 · 共 373 行
~PAS
373 行
unit NullTests;
{
Author: Sean Cross
Description:
Delphi DUnit Test Case
----------------------
This unit contains a skeleton test case class generated by the
Test Case Wizard. Modify the generated code to correctly setup
and call the methods from the unit being tested.
Target: Delphi 4, 5, 6 and 7; Delphi 2005, 2006; Borland C++ 5 and 6
Creation: mai 8, 2006
Version: 2006.05.A
Alterations: Albert Drent
added unit tests
EMail: a.drent@aducom.com (www.aducom.com)
}
interface
uses
TestFramework, StdCtrls, AMDSqlite3, Classes, Buttons, Windows, Dialogs, Variants, Forms,
SysUtils, Controls, Graphics, Messages, ModTestU;
type
// Test methods for class TFMD
TTestNullSupport = class(TTestCase)
private
TestModule: TmodTest;
public
procedure SetUp; override;
procedure TearDown; override;
published
procedure TestGetValuesNulls;
procedure TestGetValues;
procedure TestCreateDatabase;
procedure TestInsertGivesNulls;
procedure TestSetFieldToNull;
procedure TestCalculatedFields;
procedure TestCreateAndFree;
procedure TestUpdate;
procedure TestBlobs;
procedure TestPost;
procedure TestGetFieldBufferIndex;
procedure TestTypeless;
procedure TestFieldsOutOfOrder;
end;
TTestMasterDetail = class(TTestCase)
private
TestModule: TmodTest;
public
procedure SetUp; override;
procedure TearDown; override;
published
// procedure TestCreateDatabase;
procedure TestMasterDetail;
end;
implementation
uses DateUtils, Db;
function GetCalcFieldsCount(ADataset: TDataset): integer;
var i: integer;
begin
result:= 0;
for I := 0 to ADataset.FieldCount - 1 do
if ADataset.Fields[i].FieldKind <> fkData then
inc(result);
end;
{ TTestNullSupport }
procedure TTestNullSupport.TestGetFieldBufferIndex;
begin
TestModule.CreateDatabase;
TestModule.tblCalc_.Open;
CheckEquals(1, TestModule.tblCalc_FPKey.FieldNo);
CheckEquals(0, TestModule.tblCalc_FPKey.Index);
CheckEquals(0, TestModule.tblCalc_.GetFieldBufferIndex(TestModule.tblCalc_FPKey));
CheckEquals(2, TestModule.tblCalc_FInt.FieldNo);
CheckEquals(1, TestModule.tblCalc_FInt.Index);
CheckEquals(1, TestModule.tblCalc_.GetFieldBufferIndex(TestModule.tblCalc_FInt));
CheckEquals(7, TestModule.tblCalc_FText.FieldNo);
CheckEquals(2, TestModule.tblCalc_FText.Index);
CheckEquals(6, TestModule.tblCalc_.GetFieldBufferIndex(TestModule.tblCalc_FText)); //Was 2???
CheckEquals(-1, TestModule.tblCalc_CalcInt.FieldNo);
CheckEquals(3, TestModule.tblCalc_CalcInt.Index);
CheckEquals(7, TestModule.tblCalc_.GetFieldBufferIndex(TestModule.tblCalc_CalcInt)); //was 3
CheckEquals(-1, TestModule.tblCalc_CalcString.FieldNo);
CheckEquals(4, TestModule.tblCalc_CalcString.Index);
CheckEquals(8, TestModule.tblCalc_.GetFieldBufferIndex(TestModule.tblCalc_CalcString)); //was 4
end;
procedure TTestNullSupport.TestTypeless;
begin
TestModule.CreateDatabase;
end;
procedure TTestNullSupport.SetUp;
begin
inherited;
TestModule:= TmodTest.Create(nil);
end;
procedure TTestNullSupport.TearDown;
begin
inherited;
TestModule.Free;
end;
procedure TTestNullSupport.TestBlobs;
begin
TestModule.CreateDatabase;
TestModule.OpenTable('TestBlobs');
Check(ftMemo = TestModule.tblTemp.FieldByName('FBlob').DataType);
Check(TestModule.tblTemp.FieldByName('FBlob').IsBlob);
TestModule.tblTemp.insert;
Check(TestModule.tblTemp.FieldByName('FBlob').isnull);
TestModule.tblTemp.FieldByName('FPKey').AsInteger:= 1;
TestModule.tblTemp.FieldByName('FBlob').AsString:= 'This is a blob field....';
CheckEquals('This is a blob field....', TestModule.tblTemp.FieldByName('FBlob').AsString);
TestModule.tblTemp.Post;
//
TestModule.tblTemp.Close;
TestModule.tblTemp.Open;
CheckEquals(1, TestModule.tblTemp.FieldByName('FPKey').AsInteger);
CheckEquals('This is a blob field....', TestModule.tblTemp.FieldByName('FBlob').AsString);
end;
procedure TTestNullSupport.TestCalculatedFields;
begin
TestModule.CreateDatabase;
TestModule.tblCalc_.Open;
CheckEquals(2, GetCalcFieldsCount(TestModule.tblCalc_));
CheckEquals(1, TestModule.tblCalc_FPKey.AsInteger);
CheckEquals(12345, TestModule.tblCalc_FInt.AsInteger);
CheckEquals('This is text!', TestModule.tblCalc_FText.AsString);
CheckEquals(12355, TestModule.tblCalc_CalcInt.AsInteger);
CheckEquals('Calc12345', TestModule.tblCalc_CalcString.AsString);
end;
procedure TTestNullSupport.TestCreateAndFree;
var Module: TmodTest;
begin
Module:= TmodTest.Create(nil);
Module.OpenTable('Testing');
Module.tblTemp.FieldByName('FInt').IsNull;
Module.Free;
end;
procedure TTestNullSupport.TestCreateDatabase;
begin
TestModule.CreateDatabase;
CheckEquals(2, TestModule.GetIntegerFromSql('select count(*) from Testing'));
end;
procedure TTestNullSupport.TestFieldsOutOfOrder;
begin
// as for blob test, but with fields in different order to table layout
TestModule.CreateDatabase;
TestModule.tblOutOfOrder_.Open;
Check(ftMemo = TestModule.tblOutOfOrder_FBlob.DataType);
Check(TestModule.tblOutOfOrder_FBlob.IsBlob);
TestModule.tblOutOfOrder_.insert;
Check(TestModule.tblOutOfOrder_FBlob.isnull);
// CheckEquals('', TestModule.tblTemp.FieldByName('FBlob').AsString);
TestModule.tblOutOfOrder_.FieldByName('FPKey').AsInteger:= 1;
TestModule.tblOutOfOrder_FBlob.AsString:= 'This is a blob field....';
CheckEquals('This is a blob field....', TestModule.tblOutOfOrder_.FieldByName('FBlob').AsString);
TestModule.tblOutOfOrder_.Post;
TestModule.tblOutOfOrder_.Close;
TestModule.tblOutOfOrder_.Open;
CheckEquals(1, TestModule.tblOutOfOrder_.FieldByName('FPKey').AsInteger);
CheckEquals('This is a blob field....', TestModule.tblOutOfOrder_FBlob.AsString);
TestModule.sqlOutOfOrder_.Close;
TestModule.sqlOutOfOrder_.Open;
CheckEquals(1, TestModule.sqlOutOfOrder_FPKey.AsInteger);
CheckEquals('This is a blob field....', TestModule.sqlOutOfOrder_FBlob.AsString);
end;
procedure TTestNullSupport.TestGetValues;
begin
TestModule.CreateDatabase;
TestModule.OpenSql('select * from Testing where FPKey = 1');
CheckEquals(1, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
CheckEquals(12345, TestModule.sqlTemp.FieldByName('FInt').AsInteger);
CheckEquals(123.45, TestModule.sqlTemp.FieldByName('FFloat').AsFloat, 0.01);
CheckEquals(True, TestModule.sqlTemp.FieldByName('FBool').AsBoolean);
CheckEquals(EncodeDate(2006, 4, 1), TestModule.sqlTemp.FieldByName('FDate').AsDateTime);
CheckEquals(EncodeDateTime(2006, 4, 1, 23, 30, 0, 0), TestModule.sqlTemp.FieldByName('FDateTime').AsDateTime);
CheckEquals('This is text!', TestModule.sqlTemp.FieldByName('FText').AsString);
end;
procedure TTestNullSupport.TestGetValuesNulls;
begin
TestModule.CreateDatabase;
TestModule.OpenSql('select * from Testing where FPKey = 2');
CheckEquals(2, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
Check(TestModule.sqlTemp.FieldByName('FInt').IsNull);
Check(TestModule.sqlTemp.FieldByName('FFloat').IsNull);
Check(TestModule.sqlTemp.FieldByName('FBool').IsNull);
Check(TestModule.sqlTemp.FieldByName('FDate').IsNull);
Check(TestModule.sqlTemp.FieldByName('FDateTime').IsNull);
Check(TestModule.sqlTemp.FieldByName('FText').IsNull);
end;
procedure TTestNullSupport.TestInsertGivesNulls;
begin
TestModule.CreateDatabase;
TestModule.OpenTable('Testing');
// CheckEquals(1, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
TestModule.tblTemp.Insert;
Check(TestModule.tblTemp.FieldByName('FInt').IsNull);
Check(TestModule.tblTemp.FieldByName('FFloat').IsNull);
Check(TestModule.tblTemp.FieldByName('FBool').IsNull);
Check(TestModule.tblTemp.FieldByName('FDate').IsNull);
Check(TestModule.tblTemp.FieldByName('FDateTime').IsNull);
Check(TestModule.tblTemp.FieldByName('FText').IsNull);
end;
procedure TTestNullSupport.TestPost;
begin
TestModule.CreateDatabase;
// not nulls
TestModule.OpenTable('Testing');
TestModule.tblTemp.Insert;
TestModule.tblTemp.FieldByName('FPKey').AsInteger:= 3;
TestModule.tblTemp.FieldByName('FInt').AsInteger:= 67890;
TestModule.tblTemp.FieldByName('FFloat').AsFloat:= 678.9;
TestModule.tblTemp.FieldByName('FBool').AsBoolean:= true;
TestModule.tblTemp.FieldByName('FDate').AsDateTime:= EncodeDate(2006, 4, 10);
TestModule.tblTemp.FieldByName('FDateTime').AsDateTime:= EncodeDateTime(2006, 4, 10, 23, 30, 0, 0);
TestModule.tblTemp.FieldByName('FText').AsString:= 'ABCDE';
TestModule.tblTemp.Post;
TestModule.tblTemp.Insert;
TestModule.tblTemp.FieldByName('FPKey').AsInteger:= 4;
TestModule.tblTemp.Post;
TestModule.OpenSql('select * from Testing where FPKey = 3');
CheckEquals(3, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
CheckEquals(67890, TestModule.sqlTemp.FieldByName('FInt').AsInteger);
CheckEquals(678.9, TestModule.sqlTemp.FieldByName('FFloat').AsFloat, 0.01);
CheckEquals(True, TestModule.sqlTemp.FieldByName('FBool').AsBoolean);
CheckEquals(EncodeDate(2006, 4, 10), TestModule.sqlTemp.FieldByName('FDate').AsDateTime);
CheckEquals(EncodeDateTime(2006, 4, 10, 23, 30, 0, 0), TestModule.sqlTemp.FieldByName('FDateTime').AsDateTime);
CheckEquals('ABCDE', TestModule.sqlTemp.FieldByName('FText').AsString);
// nulls
TestModule.OpenSql('select * from Testing where FPKey = 4');
CheckEquals(4, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
Check(TestModule.sqlTemp.FieldByName('FInt').IsNull);
Check(TestModule.sqlTemp.FieldByName('FFloat').IsNull);
Check(TestModule.sqlTemp.FieldByName('FBool').IsNull);
Check(TestModule.sqlTemp.FieldByName('FDate').IsNull);
Check(TestModule.sqlTemp.FieldByName('FDateTime').IsNull);
Check(TestModule.sqlTemp.FieldByName('FText').IsNull);
end;
procedure TTestNullSupport.TestSetFieldToNull;
begin
TestModule.CreateDatabase;
TestModule.OpenTable('Testing');
CheckEquals(1, TestModule.tblTemp.FieldByName('FPKey').AsInteger);
CheckEquals(false, TestModule.tblTemp.FieldByName('FInt').IsNull);
CheckEquals(false, TestModule.tblTemp.FieldByName('FFloat').IsNull);
CheckEquals(false, TestModule.tblTemp.FieldByName('FBool').IsNull);
CheckEquals(false, TestModule.tblTemp.FieldByName('FDate').IsNull);
CheckEquals(false, TestModule.tblTemp.FieldByName('FDateTime').IsNull);
CheckEquals(false, TestModule.tblTemp.FieldByName('FText').IsNull);
TestModule.tblTemp.FieldByName('FInt').Clear;
TestModule.tblTemp.FieldByName('FFloat').Clear;
TestModule.tblTemp.FieldByName('FBool').Clear;
TestModule.tblTemp.FieldByName('FDate').Clear;
TestModule.tblTemp.FieldByName('FDateTime').Clear;
TestModule.tblTemp.FieldByName('FText').Clear;
Check(TestModule.tblTemp.FieldByName('FInt').IsNull);
Check(TestModule.tblTemp.FieldByName('FFloat').IsNull);
Check(TestModule.tblTemp.FieldByName('FBool').IsNull);
Check(TestModule.tblTemp.FieldByName('FDate').IsNull);
Check(TestModule.tblTemp.FieldByName('FDateTime').IsNull);
Check(TestModule.tblTemp.FieldByName('FText').IsNull);
end;
procedure TTestNullSupport.TestUpdate;
begin
TestModule.CreateDatabase;
TestModule.OpenTable('Testing');
// CheckEquals(1, TestModule.sqlTemp.FieldByName('FPKey').AsInteger);
TestModule.tblTemp.Insert;
TestModule.tblTemp.FieldByName('FInt').AsInteger:= 67890;
CheckEquals(67890, TestModule.tblTemp.FieldByName('FInt').AsInteger);
TestModule.tblTemp.FieldByName('FFloat').AsFloat:= 678.9;
CheckEquals(678.9, TestModule.tblTemp.FieldByName('FFloat').AsFloat, 0.01);
TestModule.tblTemp.FieldByName('FBool').AsBoolean:= true;
CheckEquals(True, TestModule.tblTemp.FieldByName('FBool').AsBoolean);
TestModule.tblTemp.FieldByName('FBool').AsBoolean:= false;
CheckEquals(false, TestModule.tblTemp.FieldByName('FBool').AsBoolean);
TestModule.tblTemp.FieldByName('FDate').AsDateTime:= EncodeDate(2006, 4, 10);
CheckEquals(EncodeDate(2006, 4, 10), TestModule.tblTemp.FieldByName('FDate').AsDateTime);
// 2006-04-01 23:30:00.000
TestModule.tblTemp.FieldByName('FDateTime').AsDateTime:= EncodeDateTime(2006, 4, 10, 23, 30, 0, 0);
CheckEquals(EncodeDateTime(2006, 4, 10, 23, 30, 0, 0), TestModule.tblTemp.FieldByName('FDateTime').AsDateTime);
TestModule.tblTemp.FieldByName('FText').AsString:= 'ABCDE';
CheckEquals('ABCDE', TestModule.tblTemp.FieldByName('FText').AsString);
end;
procedure TTestMasterDetail.TestMasterDetail;
begin
TestModule.CreateDatabase;
end;
procedure TTestMasterDetail.SetUp;
begin
inherited;
TestModule:= TmodTest.Create(nil);
end;
procedure TTestMasterDetail.TearDown;
begin
inherited;
TestModule.Free;
end;
initialization
// Register any test cases with the test runner
RegisterTest(TTestNullSupport.Suite);
RegisterTest(TTestMasterDetail.Suite);
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?