小编Mit*_*h A的帖子

棕色域ASP.NET应用程序的有用/现实代码覆盖目标

让我限定这个问题.我正在开发一个"经典"的ASP.NET应用程序(Web窗体),它不使用Model-View-Presenter而且不是使用TDD编写的.它还使用过时的数据访问策略(手写DAO层调用存储过程来填充和持久化对象),尽管我强烈希望这样做,但它不太可能升级到ORM.

自从我接手开发应用程序以来,大多数新功能都是使用TDD实现的.这仍旧旧代码库,DAL层和整个UI未经测试.在我弄清楚应用程序距离神秘的70%代码覆盖率目标有多远之前,我想清楚一下在确定代码覆盖率时通常包含哪种代码.

明确包含业务逻辑代码,但WebForms代码如何?另外,数据访问代码怎么样?如上所述,我们的数据访问层使用存储过程来填充对象图并将它们保存回DB.物体持久性和再水化是否应包括在内?

我很抱歉,如果这个问题太开放,我只是觉得有点不知所措,并且对如何使这个棕色地块应用程序更好地形成一些困惑.

谢谢!

asp.net unit-testing webforms code-coverage brownfield

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

通过IoC将依赖项提供给工厂类?

我有一个工厂类,它决定它应该实例化和返回的四个可用子类中的哪一个.正如您所料,所有子类都实现相同的接口:

public static class FooFactory{
     public IFoo CreateFoo(FooEnum enum){
            switch (enum)
            {
                case Foo1:
                    return new Foo1();
                case Foo2:
                    return new Foo2();
                 case Foo3:
                    return new Foo3(IBar);//has a constructor dependency on IBar
                case Foo4:
                    return new Foo4();
                 default:
                    throw new Exception("invalid foo!");
            }
     }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,其中一个子类在其构造函数中定义了依赖项.

一些兴趣点:

  • 我们使用Spring.NET作为IoC.
  • 所有子类IFoo都是域对象,因此不会被Spring.NET实例化.如果可能的话,我想保持这种方式.
  • 该应用程序有一个手写的数据访问层(呕吐),因此这里没有ORM.

我试图找出如何最好地将IBar依赖关系传递Foo3FooFactory.我觉得这可能是通过IoC最好解决的问题,但我不能理解如何.我还希望尽可能保持FooFactory单元可测试:即我不希望在测试代码中依赖Spring.NET.

谢谢阅读.

configuration factory spring.net inversion-of-control

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

TDD可以强制创建"虚假"​​依赖项

我在ASP.NET WebForms应用程序中使用了Model-View-Presenter的样板实现.My View有两个重要事件,一个表示用户已在域模型上填写了足够的字段以启动复制检查,另一个是常规的Save事件.我的伪代码看起来像这样:

public class ItemNewPresenter : PresenterBase<IItemNewView>
{
public IItemService Service { get; private set; }
public IItemNewView View { get; private set; }

public ItemNewPresenter(IItemService service, IItemNewView view)
{
    Service = service;
    View = view;
    View.OnSave += DoItemSave;
    View.OnItemIsDuplicateCheck+= DoItemIsDuplicateCheck;
}


private void DoItemIsDuplicateCheck(object sender, CheckItemDuplicateEventArgs e)
{
    CheckForItemDuplication(e.Item);
}

private void CheckForItemDuplication(Item item){

if (Service.IsDuplicateItem(item))
    {
        View.RedirectWithNotification(BuildItemUrl(item), "This item already exists");
    }
}
private void DoItemSave(object sender, SaveItemEventArgs e)
{
    DoItemIsDuplicateCheck(this, e.ToItemDuplicateEventArgs());
    Service.Save(e.Item);
}

}
Run Code Online (Sandbox Code Playgroud)

这是我的测试,用于确保从视图中引发OnItemIsDuplicateCheck时我的演示者行为正常:

[Test] …
Run Code Online (Sandbox Code Playgroud)

c# oop tdd unit-testing dependency-injection

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

集成测试MVC应用程序,没有UI自动化的痛苦

我正在开发一个新的MVC应用程序,该应用程序将主要使用TDD编写.我想补充一些集成测试,以确保完全有线应用(我用StructureMap海委会,NHibernate的持久性)按预期工作.

虽然我打算用Selenium编写一些功能性烟雾测试,但出于可维护性的原因,我宁愿通过使用旧的C#在我的控制器上直接调用操作来进行大部分集成测试.

关于如何实现这一目标的指导令人惊讶,因此我对攻击计划进行了抨击

  1. 将所有引导代码从Global.asax中拉出并放入单独的类中
  2. 尝试利用MvcContrib-TestHelper或类似方法创建ASP.NET依赖项(上下文,请求等)

我已经完成了第1步,但实际上不知道如何继续第2步.任何指导都将不胜感激.

public class Bootstrapper
{              
    public static void Bootstrap()
    {
        DependencyResolverInitializer.Initialize();
        FilterConfig.RegisterFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        ModelBinders.Binders.DefaultBinder = new SharpModelBinder();
    }           
}

public class DependencyResolverInitializer
{
    public static Container Initialize()
    {
        var container = new Container();
        container.Configure(x => x.Scan(y =>
        {
            y.Assembly(typeof(Webmin.UI.FilterConfig).Assembly);
            y.WithDefaultConventions();
            y.LookForRegistries();

        }));

        DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
        return container;
    }
}

public class StructureMapDependencyResolver : IDependencyResolver
{
    private readonly IContainer _container;

    public StructureMapDependencyResolver(IContainer container)
    {
        _container = container;
    }

    public object GetService(Type serviceType)
    {
        if (serviceType.IsAbstract || serviceType.IsInterface) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc integration-testing mvccontrib

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

Lua:我可以使用"require"作为依赖注入的形式吗?

我正在设计一个医院集成系统,它消耗来自不同医院(我们的客户)的数据,然后根据数据库的读取配置将特定的业务规则应用于所述数据.如果我使用Java,我的第一直觉是构建一系列代表各种业务规则的接口,然后注入具体实例(使用Spring/guice)来组成一个完全配置的对象.这样我就可以在配置逻辑(什么商业规则应该适用于Hospital Foo?)和实际的业务规则本身之间实现清晰的分离.

不幸的是,我没有使用Java,我正在使用Lua.在过去的几天里,我沉浸在Lua文学中,与DI最接近的模拟似乎是模块的使用.此外,似乎管理lua模块在运行时如何解析的规则完全基于询问本地文件系统.

"模块模式"是实现我之后的最佳/唯一方式(将配置逻辑与业务逻辑分离)吗?如果是这样,如何利用Lua的模块加载规则来改变运行时加载的实际模块?

configuration lua dependency-injection loose-coupling

2
推荐指数
1
解决办法
1087
查看次数

Lua:如何在所有表上创建自定义方法

我想在Lua的数据结构上创建一个自定义包含方法table来检查密钥是否存在.用法看起来像这样:

mytable  = {}
table.insert(mytable, 'key1')
print(mytable.contains('key1'))
Run Code Online (Sandbox Code Playgroud)

谢谢.

lua

2
推荐指数
1
解决办法
916
查看次数

重定向N级子进程的标准输出

我在创建单个进程时成功重定向输出.但是,当THAT进程产生其他进程时,不会重定向输出.除了创建初始过程之外,我无法控制如何/何时实例化孙子进程.似乎唯一的其他选项可能是Win32 API调用,但我没有找到这种方法的证据.

c# winapi console-application redirectstandardoutput

2
推荐指数
1
解决办法
574
查看次数