代码之家  ›  专栏  ›  技术社区  ›  tlum

System.NullReferenceException with whocanHelpMe单元测试

  •  0
  • tlum  · 技术社区  · 16 年前

    我正在与一个基于whocanHelpMe的测试项目合作,这个项目基于Sharp架构、nhibernatevalidator等,正如它所写的“当配置文件任务被要求创建配置文件单元测试时,创建配置文件对象并毫无问题地保存它”。

    现在,profile对象是一个createProfileDetails类型,它从继承ivalidable接口的自己的validatableValueObject派生。

    当我的类基于实体而不是它们的validatableValueObject时,问题就会出现。当运行测试时,由于验证程序为空,因此会出现System.NullReferenceException。

    恐怕我无法解决这种不良行为。有人有什么建议可以深入了解这一点吗?

    谢谢,

    - Ted -

    这是堆栈跟踪:

    
    should ask the question repository to save the new question : FailedObject reference not set to an instance of an object.
    System.NullReferenceException: Object reference not set to an instance of an object.
    at SharpArch.Core.DomainModel.ValidatableObject.IsValid()
    at FieldAudit.Framework.Validation.ValidatableExtensions.Validate(IValidatable entity) in ValidatableExtensions.cs: line 33
    at FieldAudit.Tasks.QuestionTasks.CreateQuestion(Question question) in QuestionTasks.cs: line 40
    at MSpecTests.FieldAudit.Tasks.when_the_question_tasks_is_asked_to_create_a_question.b__2() in QuestionTasksSpecs.cs: line 137 
    

    这是类层次结构:

    
    entity = {FieldAudit.Domain.Question}
    [FieldAudit.Domain.Question] = {FieldAudit.Domain.Question}
      base {SharpArch.Core.DomainModel.Entity} = {FieldAudit.Domain.Question}
        base {SharpArch.Core.DomainModel.EntityWithTypedId} = {FieldAudit.Domain.Question}
          base {SharpArch.Core.DomainModel.ValidatableObject} = {FieldAudit.Domain.Question}
            Validator = null
            base {SharpArch.Core.DomainModel.BaseObject} = {FieldAudit.Domain.Question}
    
    

    源代码位于http://code.google.com/p/sharp architecture/source/browse/trunk/src/sharparch/sharparch.core/domainmodel/validatableobject.cs>

    验证注册的源代码:(抱歉,我是新用户,无法将此作为链接发布,因此您必须复制/粘贴)whocanhelpme.codeplex.com/sourcecontrol/changeset/view/58203 883241

    1 回复  |  直到 16 年前
        1
  •  1
  •   tlum    16 年前

    S ARP架构的作者和谁能帮助我?(wchm)都使用公共服务定位器为其验证类提供sharparch.core.commonvalidator.ivalidator的实现。

    其中,S ARP架构在其 SafeServiceLocator<TDependency>

    
    service = (TDependency)ServiceLocator.Current.GetService(typeof(TDependency));
    

    wchm在其 ValidatableValueObject

    
    return ServiceLocator.Current.GetInstance<IValidator>();
    

    写wchm的人只在 GetInstance<IValidator>() 单元测试方法

    
                var validator = new Validator();
                provider.Stub(p => p.GetInstance<IValidator>()).Return(validator);
    

    所以,如果改为S arp Entity 从WCHM 验证值对象 也有必要排除 GetService(typeof(IValidator)) S arp将要使用。

    推荐文章