ios - 单元测试似乎工作但不插入数据
<p><p>我正在尝试为我正在处理的项目在 objective-c中为我的 DAO 层编写所有单元测试,但是当我运行它们时,在调试它时一切似乎都正常。例如,我可以找到数据库并执行查询。我知道这些是因为我每次执行操作时都会得到 SQLITE_OK。基于此,一切看起来都不错,当我检查数据库时,我希望看到我试图在测试中插入的数据。</p>
<p>我要做的是测试在我的数据库中插入“Rol”的方法。</p>
<p>代码如下所示:</p>
<p>单元测试</p>
<pre><code>#import "RolTests.h"
@implementation RolTests
- (void)setUp
{
;
// Set-up code here.
}
- (void)tearDown
{
// Tear-down code here.
;
}
-(void)testInsertarRol
{
Rol *rol = [init];
rol.nombre = @"CEO";
rol.descripcion = @"Master of the universe";
DAORol *dao = [init];
BOOL insertRealizado = ;
STAssertTrue(insertRealizado, nil);
}
-(void) obtenerRol{}
-(void) obtenerRoles{}
-(void)modificarRol{}
-(void)testEliminarRol
{
Rol *rol = [init];
rol.identifier = 3;
DAORol *dao = [init];
BOOL rolEliminado = ;
STAssertTrue(rolEliminado, nil);
}
@end
</code></pre>
<p>DAORol</p>
<pre><code>#import "DAORol.h"
@implementation DAORol
-(BOOL)insertarRol:(Rol *) rol
{
BOOL respuesta;
NSString *ubicacionDB = ;
int b = sqlite3_open_v2(, &bd,SQLITE_OPEN_READWRITE, NULL);
if(!(b == SQLITE_OK)){
NSLog(@"No se puede conectar con la BD. Error %i ", b);
}
const char *sentenciaSQL = [ UTF8String];
sqlite3_stmt *sqlStatement;
int i = sqlite3_prepare_v2(bd, sentenciaSQL, -1, &sqlStatement, NULL);
if (i == SQLITE_OK) {
respuesta = YES;
}
if(i != 0){
NSLog(@"Problema al preparar el statement. Error %i ", i);
respuesta = NO;
}
return respuesta;
}
@end
</code></pre>
<p>DAOBase</p>
<pre><code>#import "DAOBase.h"
@implementation DAOBase
- (NSString *) obtenerRutaBD{
NSString *dirDocs;
NSArray *rutas;
NSString *rutaBD;
rutas = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
dirDocs = ;
NSFileManager *fileMgr = ;
rutaBD = [ initWithString:];
if( == NO){
resourcePath] stringByAppendingPathComponent:@"totem.sqlite"] toPath:rutaBD error:NULL];
}
return rutaBD;
}
@end
</code></pre>
<p>编辑:</p>
<p>我将单元测试更改为如下所示</p>
<pre><code>-(void)testInsertarRol
{
Rol *rol = [init];
rol.nombre = @"CEO";
rol.descripcion = @"Master of the universe";
DAORol *dao = [init];
BOOL insertRealizado = ;
NSMutableArray *roles =;
for (Rol *rol in roles)
{
NSLog(rol.nombre);
}
STAssertTrue(insertRealizado, nil);
}
</code></pre>
<p>如果您循环角色,您希望看到“CEO”,但...您没有...所以数据没有插入数据库中</p>
<p>运行这些测试后,我期望在我的 Rol 表中有一行包含值“CEO”和“Master of the Universe”......但数据没有被插入。</p>
<p>我不知道出了什么问题,所以任何指针都会很棒。</p>
<p>感谢您的宝贵时间!</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>一切都很好,但你只需要在 sqlite3_prepare_v2(bd, sentenciaSQL, -1, &sqlStatement, NULL); 之后添加一行在所有需要对数据库提交更改的语句中(插入、更新和删除)。</p>
<p>只需添加 sqlite3_step(sqlStatement);你就完成了!</p>
<p>你甚至可以做类似的事情</p>
<p>if (sqlite3_step(sqlStatement) == SQLITE_DONE) {
成功
}
别的{
错误
}</p></p>
<p style="font-size: 20px;">关于ios - 单元测试似乎工作但不插入数据,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/17092611/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/17092611/
</a>
</p>
页:
[1]