Sforzo (test unità EF) con errori

c# effort entity-framework unit-testing

Domanda

Sto provando a fare il test delle unità su alcune classi che rispondono su un contesto del database di Entity Framework. Per aiuto, sono riuscito a trovare una libreria chiamata Effort, che sembra essere un po 'vecchia e non molto ben documentata, ma sembra funzionare e sembra essere piuttosto popolare.

Sto cercando di utilizzare un caricatore di dati CSV.

Quando faccio un ToArray() ricevo delle eccezioni che dicono che Sequence contains no matching element .

Qualche idea su cosa potrei fare in modo errato? O se non fosse una biblioteca diversa potrei voler dare una possibilità?

Alcuni frammenti:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Contesto DB:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Il SEC_USER.csv:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Il test:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

System.InvalidOperationException:

[Table("SEC_USER")]
public class SecUser {
    [Key][Column("USERID")]
    public int UserId { get; set; }

    [Column("USERNAME")]
    public string UserName { get; set; }
}

Risposta popolare

Ho appena avuto questo problema e ho scoperto che il problema era che stavo usando l'annotazione dei dati ColumnType . Anche quando ho cambiato l'uso della convenzione del builder di modello HasColumnType , ho ancora ottenuto lo stesso errore. Immagino che una delle tue entità abbia quell'annotazione dati (o convenzione)?

In questo caso, la soluzione più semplice sarebbe rimuovere l'annotazione dei dati. Se non è possibile, ho creato una proprietà virtuale (ad esempio, public virtual bool IsInMemoryContext { get; } = false; ) sul DbContext che ho annullato nei miei test - public override bool IsInMemoryContext { get; } = true; e nel metodo OnModelCreating , ho controllato se questa proprietà era stata impostata, prima di aggiungere i tipi di colonna.

if (!IsInMemoryContext)
{
    modelBuilder.Entity<AuditLog>()
        .Property(e => e.EventType)
        .HasColumnType("char");
}

Ulteriori informazioni sull'errore sono disponibili qui: Problema di GitHub con Effort




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché