Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 无法转换';NHibernate.Collection.Generic.PersistentGenericSet`1到System.Collections.Generic.IList`1_Unit Testing_Nhibernate_Fluent Nhibernate_Tdd_Fluent Nhibernate Test - Fatal编程技术网

Unit testing 无法转换';NHibernate.Collection.Generic.PersistentGenericSet`1到System.Collections.Generic.IList`1

Unit testing 无法转换';NHibernate.Collection.Generic.PersistentGenericSet`1到System.Collections.Generic.IList`1,unit-testing,nhibernate,fluent-nhibernate,tdd,fluent-nhibernate-test,Unit Testing,Nhibernate,Fluent Nhibernate,Tdd,Fluent Nhibernate Test,我有一个域类: public class Agencia : IEntity { public virtual int Id { get; set; } public virtual string Nome { get; set; } public virtual string Identificacao { get; set; } public virtual IList<Pessoa> Gerentes { get; protected se

我有一个域类:

public class Agencia : IEntity
{
    public virtual int Id { get; set; }

    public virtual string Nome { get; set; }

    public virtual string Identificacao { get; set; }

    public virtual IList<Pessoa> Gerentes { get; protected set; }

    public Agencia()
    {
        Gerentes = new List<Pessoa>();
    }

    public virtual void AddGerente(Pessoa gerente)
    {
        Gerentes.Add(gerente);
    }
    public virtual void AddGerentes(params Pessoa[] gerentes)
    {
        Parallel.ForEach(gerentes, (pessoa) => Gerentes.Add(pessoa));
    }
}

public class Pessoa: IEntity
{
    public virtual int Id { get; set; }

    public virtual string Nome { get; set; }

}
当我运行此测试时:

[TestMethod]
[Description("Uma agência tem vários gerêntes")]
public void AgenciaTemVariosGerentes()
{
    // Arrange
    var fix = new Fixture();
    var currentUser = GetLoggedUser();

    // Create a List<Pessoa>

    var gerentes = fix.Build<Pessoa>()
                        .With(p => p.Nome)
                        .With(p => p.CPF)
                        .With(p => p.CreateBy, currentUser)
                        .OmitAutoProperties()
                        .CreateMany<Pessoa>(10).ToList();

    // Action

    new PersistenceSpecification<Agencia>(Session)
            .CheckProperty(p => p.Nome, fix.Create<string>().Truncate(80))
            .CheckProperty(p => p.Identificacao, fix.Create<string>().Truncate(10))
            .CheckReference(p => p.Regional,
                fix.Build<Regional>()
                    .With(p => p.Nome)
                    .OmitAutoProperties()
                    .Create()
            , new IDEqualityComparer())
            .CheckList(p => p.Gerentes, gerentes, new IDEqualityComparer())
            .CheckReference(p => p.CreateBy, currentUser, new IDEqualityComparer())
            .VerifyTheMappings(); // Assert
}
[TestMethod]
[说明(“Uma agência tem vários gerêntes”)]
公共无效代理VariosGerentes()
{
//安排
var fix=新夹具();
var currentUser=GetLoggedUser();
//创建一个列表
var gerentes=fix.Build()
.With(p=>p.Nome)
.有(p=>p.CPF)
.With(p=>p.CreateBy,currentUser)
.自动属性()
.CreateMany(10.ToList();
//行动
新PersistenceSpecification(会话)
.CheckProperty(p=>p.Nome,fix.Create().Truncate(80))
.CheckProperty(p=>p.IdentificationCacao,fix.Create().Truncate(10))
.CheckReference(p=>p.地区、,
fix.Build()
.With(p=>p.Nome)
.自动属性()
.Create()
,新的IDEqualityComparer())
.CheckList(p=>p.Gerentes,Gerentes,new IDEqualityComparer())
.CheckReference(p=>p.CreateBy、currentUser、new-IDEqualityComparer())
.VerifyTheMappings();//断言
}
如何测试此列表

集合应该是
资产
,父字段和子字段必须是PK、FK

完全错误:

测试名称:AgenciaTemVariosGerentes 测试全名:{OMMITED}.Integration.Test.AgenciaTest.agenciatemvariosgrentes 测试源:{OMMITED}.Integration.Test\AgenciaTest.cs:第22行 测试结果:失败 测试持续时间:0:00:024093555

结果消息: 测试方法{OMMITED}.Integration.Test.AgenciaTest.AgenciaTemVariosGerentes引发异常: NHibernate.PropertyAccessException:无效强制转换(检查映射中的属性类型不匹配);CreditoImobiliarioBB.Model.Regional的setter-->System.InvalidCastException:无法将类型为“NHibernate.Collection.Generic.PersistentGenericSet
1[CreditoImobiliarioBB.Model.Pessoa]”的对象强制转换为类型“System.Collections.Generic.IList
1[CreditoImobiliarioBB.Model.Pessoa]”。 结果堆栈跟踪:
at(Object,Object[],SetterCallback) 位于NHibernate.Bytecode.Lightweight.AccessOptimizer.SetPropertyValues(对象目标,对象[]值) 在NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValuesWithOptimizer处(对象实体,对象[]值) ---内部异常堆栈跟踪的结束--- 在NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValuesWithOptimizer处(对象实体,对象[]值) 位于NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValues(对象实体,对象[]值) 位于NHibernate.Persister.Entity.AbstractEntityTyperSister.SetPropertyValues(对象obj,对象[]值,EntityMode EntityMode) 在NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(对象实体、EntityKey键、IEntityPersister持久化器、布尔UseIdentity列、对象任意项、IEventSource源、布尔RequiremediatedAccess) 在NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(对象实体、对象id、IEntypersister持久化器、布尔UseIdentity列、对象任意项、IEventSource源、布尔RequiresimmediatedAccess) 位于NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGenerateId(对象实体、字符串entityName、对象任意项、IEventSource源、布尔RequiresimmediatedAccess) 在NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent事件) 在NHibernate.Event.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent事件) 在NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent事件) 在NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent事件)中 在NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent事件)中 在NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent事件) 在NHibernate.Impl.SessionImpl.Save(objectobj)中 在FluentNHibernate.Testing.PersistenceSpecification
1.TransactionalSave(对象属性值)
在FluentNHibernate.Testing.Values.ReferenceProperty
2.HasRegistered(持久性规范
1规范)
在FluentNHibernate.Testing.PersistenceSpecification
1.RegisterCheckedProperty(属性
1属性,IEqualityComparer相等Comparer)
在FluentNHibernate.Testing.PersistenceSpecificationExtensions.CheckReference[T](PersistenceSpecification
1规范,表达式'1表达式,对象属性值,IEqualityComparer属性Comparer) 在{OMMITED}.Integration.Test\AgenciaTest.cs第27行的CreditoImobiliarioBB.Repository.Integration.Test.AgenciaTest.agenciatemvariosgrentes()中


谢谢。

集合不实现
IList

将属性定义为
ICollection

[TestMethod]
[Description("Uma agência tem vários gerêntes")]
public void AgenciaTemVariosGerentes()
{
    // Arrange
    var fix = new Fixture();
    var currentUser = GetLoggedUser();

    // Create a List<Pessoa>

    var gerentes = fix.Build<Pessoa>()
                        .With(p => p.Nome)
                        .With(p => p.CPF)
                        .With(p => p.CreateBy, currentUser)
                        .OmitAutoProperties()
                        .CreateMany<Pessoa>(10).ToList();

    // Action

    new PersistenceSpecification<Agencia>(Session)
            .CheckProperty(p => p.Nome, fix.Create<string>().Truncate(80))
            .CheckProperty(p => p.Identificacao, fix.Create<string>().Truncate(10))
            .CheckReference(p => p.Regional,
                fix.Build<Regional>()
                    .With(p => p.Nome)
                    .OmitAutoProperties()
                    .Create()
            , new IDEqualityComparer())
            .CheckList(p => p.Gerentes, gerentes, new IDEqualityComparer())
            .CheckReference(p => p.CreateBy, currentUser, new IDEqualityComparer())
            .VerifyTheMappings(); // Assert
}