小编Mit*_*h A的帖子

AutoFixture:如何从System.Type创建CreateAnonymous

我只需要使用System.Type从AutoFixture创建一个对象.但是,似乎没有过载CreateAnonymous(),只需要一种类型.他们都期望编译时通用T.有没有办法将System.Type转换为T?

编辑使用细节:

我正在使用AutoMapper,它有一个用于注入组件的钩子,以支持复杂的映射场景:

void ConstructServicesUsing(System.Func<Type,object> constructor)
Run Code Online (Sandbox Code Playgroud)

从签名中可以看出,客户端可以注册FuncAutoMapper何时需要注入服务(主要是ValueResolver实现).

在生成版本中,此方法调用我的StructureMap容器​​来检索组件.但是,在单元测试我的映射代码时,我必须提供存根实现,否则AutoMapper会抛出异常.由于我使用AutoFixture + Moq作为我的自动锁定容器,因此让AF新建一个完全水合的存根似乎很自然,所以我可以集中精力编写单元测试代码.

c# reflection automapper autofixture

18
推荐指数
1
解决办法
2093
查看次数

这是IOC的典型用例吗?

我当前的应用程序允许用户通过一组管理屏幕定义自定义Web表单.它本质上是一个EAV类型的应用程序.因此,我无法硬编码HTML或ASP.NET标记来呈现给定页面.相反,UI从服务层请求Form对象的实例,而该服务层又使用多个RDMBS表构造一个.表单包含您希望在这样的上下文中看到的类:Form=> IEnumerable<FormSections>=>IEnumerable<FormFields>

以下是服务层的外观:

public class MyFormService: IFormService{

       public Form OpenForm(int formId){
          //construct and return a concrete implementation of Form 
       }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好(一段时间).UI对于给定表单中存在哪些部分/字段并不明智:它很乐意将它接收的Form对象呈现为功能性ASP.NET页面.

几周后,我从业务中得到了一个新的要求:当查看表单的不可编辑(即只读)版本时,某些字段值应该合并在一起,并且应该添加其他设计/计算字段.没问题,我说.只需修改我的服务类,使其方法更明确:

public class MyFormService: IFormService{

       public Form  OpenFormForEditing(int formId){
          //construct and return a concrete implementation of Form 
       }

       public Form  OpenFormForViewing(int formId){
          //construct and a concrete implementation of Form  
          //apply additional transformations to the form
       }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,平衡已恢复到力量.用户界面仍然不知道表格中的内容,我们的关注点分离得以实现.然而,仅仅几个星期之后,该业务就提出了一项新要求:在某些情况下,我们应该只应用上面提到的一些表单转换.

在这一点上,感觉就像"显式方法"方法已达到死胡同,除非我想最终爆发一些方法(OpenFormViewingScenario1,OpenFormViewingScenario2等).相反,我引入了另一个间接层:

public interface IFormViewCreator{
        void CreateView(Form form);
}

public class MyFormService: IFormService{

       public Form …
Run Code Online (Sandbox Code Playgroud)

oop abstraction design-patterns dependency-injection inversion-of-control

15
推荐指数
1
解决办法
555
查看次数

OpenCover:可以将多个报告合并为一个吗?

我正在使用OpenCover为Web应用程序生成功能测试覆盖率.这些测试运行时间相当长(3个多小时),因此我们将它们分成多个并行运行的测试.因此,有六个,而不是单一的报道报告.

为了将这些覆盖率报告导入SonarQube,我需要找到一种方法将它们组合成一个超级报告.ReportGenerator支持将多个报表合并为一个,但会创建HTML输出,这不是SonarQube可以使用的.

此时我的选择是

  1. 手动滚动OpenCover报告合并(blech!)
  2. 连续运行我的功能测试,大大增加了故障反馈时间

我还缺少其他任何选择吗?

c# code-coverage opencover sonarqube

9
推荐指数
1
解决办法
2378
查看次数

IIS 7.5:在响应中强制保持活动标头

根据我的研究,IIS 7.5不包括连接:保持活动中其描述响应的原因在这里.不幸的是,我有一个不符合要求的客户端连接到我的Web服务,它不会重用套接字,除非它在响应头中看到Connection:Keep-Alive.我已尝试以编程方式添加此标头但IIS似乎故意将其删除.有没有其他方法可以强制将此标题发送回我顽皮的客户端?

.net iis keep-alive

7
推荐指数
1
解决办法
7955
查看次数

Jest AutoMocking在测试React组件时是否有效?

我的有限数量的测试似乎表明答案是否定的.我正在为一个父级React组件(也就是一个控制器视图)编写一个单元测试,它依赖于一个商店.但是,Jest没有为商店提供自动模拟,因为文档建议它应该,而是调用真正的实现.

这是一个bug还是设计?如果是后者,单元测试反应组件是不可取的?

编辑1

在测试CommonJs模块时,自动锁定工作正常; 它只是不适用于反应组件.

flux reactjs jestjs

7
推荐指数
1
解决办法
983
查看次数

NHibernate ConventionModelMapper; IsRootEntity和IsEntity有什么区别?

我正在玩Sharp Architecture Lite,它强调约定优于配置,并试图理解NHibernate的ConventionModelMapper工作原理.具体来说,我无法区分下面的IsRootEntity和IsEntity方法(BTW,Entity是Sharp Arch附带的抽象类):

     internal static class Conventions
        {
        public static void WithConventions(this ConventionModelMapper mapper, Configuration configuration) {
                Type baseEntityType = typeof(Entity);

                mapper.IsEntity((type, declared) => IsEntity(type));
                mapper.IsRootEntity((type, declared) => baseEntityType.Equals(type.BaseType));

        public static bool IsEntity(Type type) {
                return typeof(Entity).IsAssignableFrom(type)
                       && typeof(Entity) != type
                       && !type.IsInterface;
            }
    }
Run Code Online (Sandbox Code Playgroud)

我知道该IsEntity方法用于告诉NHibernate哪些类符合数据库的映射/持久性.但是,我不能为我的生活弄清楚IsRootEntity方法的作用.周围的文档ConventionModelMapper非常稀少.

nhibernate nhibernate-mapping convention-over-configur sharp-architecture

6
推荐指数
1
解决办法
1052
查看次数

方法重载和多态

我正在编写一个.NET Web应用程序,管理员可以在其中自定义呈现给用户的各种数据输入表单.管理员可以创建和自定义大约六种不同的字段类型(即文本,数字,下拉列表,文件上载).所有字段共享一组基本属性/行为(是否需要该字段?它是否具有默认字段值?).还有一系列字段特定的属性/行为(即下拉列表具有数据源属性,但文本字段不具有).为简单起见,我将遗漏问题域的许多其他特征.

类层次结构很简单:一个抽象的超类,它封装了常见的行为/属性,以及大约六个处理字段特定内容的具体子类.

每个字段类型都呈现(即映射到)作为特定类型的.NET服务器控件,所有这些都派生自System.Web.UI.Control.

我创建了以下代码来映射字段域对象及其相应的UI控件之间的值:

public static void Bind(Control control, IList<DocumentFieldBase> fieldBaseList)

     foreach (DocumentFieldBase fieldBase in fields){

            if (typeof (DocumentFieldText).IsInstanceOfType(fieldBase)){
                TextBox textbox = (TextBox) control;
                textbox.Text = (fieldBase as DocumentFieldText).GetValue();
            }

            if (typeof (DocumentFieldDropDown).IsInstanceOfType(fieldBase)){
                DropDown dropDown= (DropDown) control;
                dropDown.Text = (fieldBase as DocumentFieldSelectOne).GetValue().Text;
                dropDown.DataSource= (fieldBase as  DocumentFieldSelectOne).DataSource;
                dropDown.Id= (fieldBase as DocumentFieldSelectOne).GetValue().Id;
            }

            //more if statements left out for brevity
      }
}
Run Code Online (Sandbox Code Playgroud)

如果执行类型检查的语句,我想抛弃那些不敬虔的人.我正在拍摄的方法是使用子类输入为每个字段/控件组合创建一个方法重载.例如:

public static void Bind(TextBox control, DocumentFieldText fieldText){
 //some implementation code
}
public static void Bind(DropDown control, DocumentFieldDropDown fieldDropDown){ …
Run Code Online (Sandbox Code Playgroud)

.net c# polymorphism overloading dispatch

5
推荐指数
2
解决办法
3059
查看次数

为什么Mock.SetupAllProperties抛出构造函数异常?

我正在使用Moq来驱动我的Model-View-Presenter单元测试.我正在测试的特定视图由子视图组成,该视图被建模为如下所示的接口:

public interface ICustomerView:IView{

    public int CustomerId {get;set;}
    public IDateRangeView DateRangeView {get;set;}

}
Run Code Online (Sandbox Code Playgroud)

在某些测试中,我不关心测试行为或与IDateRangeView的交互; 我只是希望对该属性的任何调用都不要抛出空引用异常等.看起来Moq通过将mock的DefaultValue设置为DefaultValue.Mock,然后调用SetupAllProperties来支持此功能:

[Test]
public void some_test(){

     var mockView = new Mock<ICustomerView>() { DefaultValue = DefaultValue.Mock };
     mockView.SetupAllProperties();
}
Run Code Online (Sandbox Code Playgroud)

但是,对SetupAllProperties的调用会引发此异常:

System.ArgumentException occurred
  Message="A matching constructor for the given arguments was not found on the mocked type."
  Source="Moq"
  StackTrace:
       at Moq.Mock`1.<InitializeInstance>b__0()
       at Moq.PexProtector.Invoke(Action action)
       at Moq.Mock`1.InitializeInstance()
       at Moq.Mock`1.get_Object()
       at Moq.Mock`1.GetObject()
       at Moq.Mock.get_Object()
       at Moq.MockDefaultValueProvider.ProvideDefault(MethodInfo member, Object[] arguments)
       at Moq.Mock.<>c__DisplayClass27.<SetupAllProperties>b__23()
       at Moq.PexProtector.Invoke(Action action)
       at Moq.Mock.SetupAllProperties(Mock mock)
       at Moq.Mock.<>c__DisplayClass27.<SetupAllProperties>b__23()
       at Moq.PexProtector.Invoke(Action …
Run Code Online (Sandbox Code Playgroud)

c# asp.net unit-testing moq

5
推荐指数
0
解决办法
1606
查看次数

使用package.preload模拟lua模块

我正在尝试针对单个模块函数编写单元测试.这个模块与其他几个模块合作,所以我想模拟那些模块来隔离我测试的系统.这是一些简化的伪代码:

local moduleFoo={}
local moduleBaz=  require("moduleBaz") 

moduleFoo.doSomething = function (arg) 

  if moduleBaz.bar.neatMethod(arg) then
     --does something interesting  
  end

end

return moduleFoo
Run Code Online (Sandbox Code Playgroud)

这是moduleBaz的代码

local moduleBaz={}
moduleBaz.bar= {}

moduleBaz.bar.neatMethod=function(arg)
   --does something neat
end
return moduleBaz
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用package.preload函数在我的测试运行之前注入moduleBaz的模拟实例,但它似乎不起作用(即模块中的实际实例用于测试,而不是我的模拟)

这是一些psueudo测试代码:

    package.loaded.moduleBaz= nil
    local moduleBaz = {}
    moduleBaz.bar = {}
    moduleBaz.bar.neatMethod= function(guid) return true end

    package.preload['moduleBaz'] = function ()
        return moduleBaz
    end

   local foo= require("moduleFoo")
   foo.doSomething('asdasdasda')--real moduleBaz is called, not my mock!
Run Code Online (Sandbox Code Playgroud)

我有什么想法我做错了吗?我对Lua很新,对语言中的范围处理方式一点也不熟悉!

lua mocking

4
推荐指数
1
解决办法
2032
查看次数

这个ES6代码有什么作用?

我正在查看源代码附带的redux todomvc示例,并且有一些我以前没见过的JavaScript表示法.我熟悉ES6 export语法,但不明白这段代码片段末尾的导出语句是做什么的.为什么App类与connect函数的结果相结合?

import React, { Component, PropTypes } from 'react'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import Header from '../components/Header'
import MainSection from '../components/MainSection'
import * as TodoActions from '../actions'

class App extends Component {
  render() {
    const { todos, actions } = this.props
    return (
      <div>
        <Header addTodo={actions.addTodo} />
        <MainSection todos={todos} actions={actions} />
      </div>
    )
  }
}

function mapStateToProps(state) {
  return {
    todos: state.todos
  }
}

function mapDispatchToProps(dispatch) {
  return { …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 redux

4
推荐指数
1
解决办法
663
查看次数