菜鸟教程小白 发表于 2022-12-12 11:48:55

ios - 单元测试似乎工作但不插入数据


                                            <p><p>我正在尝试为我正在处理的项目在 objective-c中为我的 DAO 层编写所有单元测试,但是当我运行它们时,在调试它时一切似乎都正常。例如,我可以找到数据库并执行查询。我知道这些是因为我每次执行操作时都会得到 SQLITE_OK。基于此,一切看起来都不错,当我检查数据库时,我希望看到我试图在测试中插入的数据。</p>

<p>我要做的是测试在我的数据库中插入“Rol”的方法。</p>

<p>代码如下所示:</p>

<p>单元测试</p>

<pre><code>#import &#34;RolTests.h&#34;

@implementation RolTests

- (void)setUp
{
    ;

    // Set-up code here.
}

- (void)tearDown
{
    // Tear-down code here.

    ;
}

-(void)testInsertarRol
{
    Rol *rol = [init];
    rol.nombre = @&#34;CEO&#34;;
    rol.descripcion = @&#34;Master of the universe&#34;;

    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 &#34;DAORol.h&#34;

@implementation DAORol

-(BOOL)insertarRol:(Rol *) rol
{
    BOOL respuesta;

    NSString *ubicacionDB = ;

    int b = sqlite3_open_v2(, &amp;bd,SQLITE_OPEN_READWRITE, NULL);

    if(!(b == SQLITE_OK)){
    NSLog(@&#34;No se puede conectar con la BD. Error %i &#34;, b);
}


const char *sentenciaSQL = [ UTF8String];

   sqlite3_stmt *sqlStatement;

   int i = sqlite3_prepare_v2(bd, sentenciaSQL, -1, &amp;sqlStatement, NULL);
   if (i == SQLITE_OK) {
    respuesta = YES;
   }
   if(i != 0){
    NSLog(@&#34;Problema al preparar el statement. Error %i &#34;, i);
    respuesta = NO;
}

    return respuesta;
}

@end
</code></pre>

<p>DAOBase</p>

<pre><code>#import &#34;DAOBase.h&#34;

@implementation DAOBase

- (NSString *) obtenerRutaBD{

NSString *dirDocs;
NSArray *rutas;
NSString *rutaBD;

rutas = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);

dirDocs = ;

NSFileManager *fileMgr = ;

rutaBD = [ initWithString:];

if( == NO){
    resourcePath] stringByAppendingPathComponent:@&#34;totem.sqlite&#34;] toPath:rutaBD error:NULL];
}

return rutaBD;
}

@end
</code></pre>

<p>编辑:</p>

<p>我将单元测试更改为如下所示</p>

<pre><code>-(void)testInsertarRol
{
    Rol *rol = [init];
    rol.nombre = @&#34;CEO&#34;;
    rol.descripcion = @&#34;Master of the universe&#34;;

    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]
查看完整版本: ios - 单元测试似乎工作但不插入数据