小编She*_*ock的帖子

ASP.NET webforms中的模型Binder

多年来我做了ASP.NET Web表单开发我被一个专有库所破坏,这让我可以做以下事情:

    UpdateToObject(ControlsCollection, obj)
    UpdateFromObject(ControlsCollection, obj)
Run Code Online (Sandbox Code Playgroud)

概念上,代码做了一些与MVC Model Binder非常相似的东西,即将表单的发布值作为输入,它将填充自定义对象.基本上它使开发人员免于做猴子代码,如

employee.Name = txtName.Text;
employee.DOB = DateTime.Parse(txtDOB.Text);
Run Code Online (Sandbox Code Playgroud)

等等..

现在,这个专有的库在我参与的新项目中不可用,它是一个Web表单项目.所以我想知道是否有一种System.Web.Mvc.DefaultModelBinder在Web表单的上下文中使用的方法.目标是从域对象和背面实现简单和容易的控制,最好考虑验证注释.如果不可能,有人可能会指出我的开源解决方案来满足这种需求.我真的不想重写这样的代码.

提前致谢.

asp.net webforms defaultmodelbinder modelbinders

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

如何单元测试BackgroundWorker C#

我正在尝试进行单元测试,使用VS单元测试设备跟随方法.

void Get(string name, Action<string> callBack);
Run Code Online (Sandbox Code Playgroud)

这是单元测试仪

    [TestMethod]
    public void Test()
    {
        Action<string> cb = name =>
        {
            Assert.IsNotNull(name);
        };

        var d = new MyClass();
        d.Get("test", cb);
    }
Run Code Online (Sandbox Code Playgroud)

唯一的问题是内部实现使用BackgroundWorker,因此在另一个线程上调用回调.这是内部实施.

    public void Get(string name, Action<string> callBack)
    {
        callBackString = callBack;
        GetData(name);
    }  

    private void GetData(string name)
    {
        BackgroundWorker bw = new BackgroundWorker();
        bw.DoWork += bw_DoWork;
        bw.RunWorkerCompleted += bw_RunWorkerCompleted;
        bw.RunWorkerAsync(name);
    }

    private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        //do work here
        if (null != callBackString)
            callBackString("ok");
    }
Run Code Online (Sandbox Code Playgroud)

当然因为Get()立即返回,测试完成并且测试停止,因此RunWorkerCompleted永远不会被执行.我可以通过普通应用程序(WPF)轻松测试它,因为它仍在运行,但我希望能够对此进行单元测试.

有任何想法吗?提前致谢.

c# unit-testing backgroundworker

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