Dreamine.FullKit.Tests
1.0.0.0
Dreamine.FullKit.Tests 기능을 검증하는 자동화 테스트 프로젝트입니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
DatabaseProviderDialectTests.cs
이 파일의 문서화 페이지로 가기
1
using
System.Reflection;
2
using
Dreamine.Database.Abstractions.Mapping;
3
using
Dreamine.Database.Core.Mapping;
4
using
Dreamine.Database.MySql;
5
using
Dreamine.Database.Oracle;
6
using
Dreamine.Database.SqlServer;
7
using
Dreamine.Database.Sqlite;
8
9
namespace
Dreamine.FullKit.Tests.Database
;
10
19
public
sealed
class
DatabaseProviderDialectTests
20
{
29
[Fact]
30
public
void
SqliteProvider_BuildsSqliteCreateTableSql
()
31
{
32
var sql =
BuildCreateTableSql
(
new
SqliteDatabaseProvider(
"Data Source=:memory:"
));
33
34
Assert.Contains(
"\"DialectSamples\""
, sql);
35
Assert.Contains(
"\"Id\" INTEGER PRIMARY KEY AUTOINCREMENT"
, sql);
36
Assert.Contains(
"\"Name\" TEXT"
, sql);
37
}
38
47
[Fact]
48
public
void
MySqlProvider_BuildsMySqlCreateTableSql
()
49
{
50
var sql =
BuildCreateTableSql
(
new
MySqlDatabaseProvider(
"Server=localhost;Database=dreamine;User Id=user;Password=password;"
));
51
52
Assert.Contains(
"`DialectSamples`"
, sql);
53
Assert.Contains(
"`Id` INT AUTO_INCREMENT PRIMARY KEY"
, sql);
54
Assert.Contains(
"`Name` TEXT"
, sql);
55
}
56
65
[Fact]
66
public
void
OracleProvider_BuildsOracleCreateTableSql
()
67
{
68
var sql =
BuildCreateTableSql
(
new
OracleDatabaseProvider(
"User Id=user;Password=password;Data Source=localhost/XEPDB1;"
));
69
70
Assert.Contains(
"\"DIALECTSAMPLES\""
, sql);
71
Assert.Contains(
"\"ID\" NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY"
, sql);
72
Assert.Contains(
"\"NAME\" NVARCHAR2(2000)"
, sql);
73
}
74
83
[Fact]
84
public
void
SqlServerProvider_BuildsSqlServerCreateTableSql
()
85
{
86
var sql =
BuildCreateTableSql
(
new
SqlServerDatabaseProvider(
"Server=localhost;Database=dreamine;User Id=user;Password=password;TrustServerCertificate=True;"
));
87
88
Assert.Contains(
"IF OBJECT_ID"
, sql);
89
Assert.Contains(
"[DialectSamples]"
, sql);
90
Assert.Contains(
"[Id] INT IDENTITY(1,1) PRIMARY KEY"
, sql);
91
Assert.Contains(
"[Name] NVARCHAR(MAX)"
, sql);
92
}
93
102
[Fact]
103
public
void
DatabaseEntityMap_CachesMapsPerEntityType
()
104
{
105
var first = DatabaseEntityMap.Create<
DialectSample
>();
106
var second = DatabaseEntityMap.Create<
DialectSample
>();
107
108
Assert.Same(first, second);
109
Assert.Same(first.InsertableProperties, second.InsertableProperties);
110
Assert.Same(first.UpdatableProperties, second.UpdatableProperties);
111
}
112
129
[Fact]
130
public
void
DatabaseProviderBase_SqlCache_ReturnsSameStringReferenceOnSubsequentCalls
()
131
{
132
// GetOrBuildSql<T> caches INSERT/UPDATE/DELETE SQL strings per (entity type, provider kind).
133
// Calling the method twice must return the same string reference — no redundant rebuild.
134
var provider =
new
SqliteDatabaseProvider(
"Data Source=:memory:"
);
135
136
// GetOrBuildSql is declared on the abstract base class — search the hierarchy.
137
var baseType = provider.GetType().BaseType
138
??
throw
new
InvalidOperationException(
"DatabaseProviderBase not found."
);
139
var getOrBuildSql = baseType
140
.GetMethod(
"GetOrBuildSql"
, BindingFlags.Instance | BindingFlags.NonPublic)
141
?.MakeGenericMethod(typeof(
DialectSample
))
142
??
throw
new
InvalidOperationException(
"GetOrBuildSql<T> not found via reflection."
);
143
144
// SqlKind is a private nested enum on the abstract base class.
145
var sqlKindType = baseType.GetNestedType(
"SqlKind"
, BindingFlags.NonPublic)
146
??
throw
new
InvalidOperationException(
"SqlKind enum not found on base type."
);
147
var insertKind = Enum.ToObject(sqlKindType, 0);
// 0 = Insert
148
149
var first = (string)getOrBuildSql.Invoke(provider, [insertKind])!;
150
var second = (string)getOrBuildSql.Invoke(provider, [insertKind])!;
151
152
Assert.Same(first, second);
153
}
154
187
private
static
string
BuildCreateTableSql
(
object
provider)
188
{
189
var method = provider
190
.GetType()
191
.GetMethod(
"BuildCreateTableSql"
, BindingFlags.Instance | BindingFlags.NonPublic)
192
??
throw
new
InvalidOperationException(
"BuildCreateTableSql was not found."
);
193
194
var map = DatabaseEntityMap.Create<
DialectSample
>();
195
return
(
string
)method.Invoke(provider, [map])!;
196
}
197
206
[DatabaseTable(
"DialectSamples"
)]
207
private
sealed
class
DialectSample
208
{
217
[DatabaseKey]
218
[DatabaseGenerated]
219
public
int
Id
{
get
;
set
; }
220
229
public
string
Name
{
get
;
set
; } =
string
.Empty;
230
239
public
DateTime
CreatedAt
{
get
;
set
; }
240
}
241
}
Dreamine.FullKit.Tests.Database
Definition
DatabaseProviderConstructionTests.cs:7
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests
Definition
DatabaseProviderDialectTests.cs:20
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.SqliteProvider_BuildsSqliteCreateTableSql
void SqliteProvider_BuildsSqliteCreateTableSql()
Definition
DatabaseProviderDialectTests.cs:30
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.DatabaseEntityMap_CachesMapsPerEntityType
void DatabaseEntityMap_CachesMapsPerEntityType()
Definition
DatabaseProviderDialectTests.cs:103
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.DatabaseProviderBase_SqlCache_ReturnsSameStringReferenceOnSubsequentCalls
void DatabaseProviderBase_SqlCache_ReturnsSameStringReferenceOnSubsequentCalls()
Definition
DatabaseProviderDialectTests.cs:130
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.SqlServerProvider_BuildsSqlServerCreateTableSql
void SqlServerProvider_BuildsSqlServerCreateTableSql()
Definition
DatabaseProviderDialectTests.cs:84
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.OracleProvider_BuildsOracleCreateTableSql
void OracleProvider_BuildsOracleCreateTableSql()
Definition
DatabaseProviderDialectTests.cs:66
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.BuildCreateTableSql
static string BuildCreateTableSql(object provider)
Definition
DatabaseProviderDialectTests.cs:187
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.MySqlProvider_BuildsMySqlCreateTableSql
void MySqlProvider_BuildsMySqlCreateTableSql()
Definition
DatabaseProviderDialectTests.cs:48
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.DialectSample
Definition
DatabaseProviderDialectTests.cs:208
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.DialectSample.Name
string Name
Definition
DatabaseProviderDialectTests.cs:229
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.DialectSample.Id
int Id
Definition
DatabaseProviderDialectTests.cs:219
Dreamine.FullKit.Tests.Database.DatabaseProviderDialectTests.DialectSample.CreatedAt
DateTime CreatedAt
Definition
DatabaseProviderDialectTests.cs:239
Database
DatabaseProviderDialectTests.cs
다음에 의해 생성됨 :
1.17.0