小编Ger*_*Bos的帖子

无法将ReactiveUI添加到NUnit测试项目

我目前正在尝试使用NUnit和Moq设置Unit来对我们的ReactiveUI ViewModels进行单元测试.但是我无法让它发挥作用.我无法将ReactiveUI添加到NUnit测试库(无法解析依赖关系'Rx-Xaml(≥2.2.5)'),我无法将Moq添加到PCL项目中.

是否可以使用NUnit和Moq对ReactiveUI ViewModels进行单元测试?

顺便说一句:我在Mac OSX 10.10.5上使用Xamarin Studio,但代码在Windows 10上正常运行:(

在OSX上我得到一个Unix传输错误,但在Windows上测试确实有效.

nunit unit-testing moq reactiveui xamarin

10
推荐指数
1
解决办法
323
查看次数

我应该将任务包装在另一个任务中,还是应该只返回创建的任务?

我正在构建一个使用ADO.NET的.NET 4.0应用程序,所以我不能使用async/await.我不想要一个解决方案,但我想知道以下哪些实现最好,为什么.我的单元测试通过所有三个实现,但我想知道这三个之间的区别.

#1嵌套任务

在我的第一个实现中,我将任务包装在另一个任务中.我认为搞两个任务对性能不利,但我不确定.

public virtual Task<IDataReader> ExecuteReaderAsync(IDbCommand dbCommand, CancellationToken cancellationToken)
{
    return Task.Factory.StartNew(() =>
    {
        var sqlCommand = CheckIfSqlCommand(dbCommand);
        PrepareExecuteReader(dbCommand);

        return Task<IDataReader>
            .Factory
            .FromAsync(sqlCommand.BeginExecuteReader, sqlCommand.EndExecuteReader, null)
            .Result;
    }, cancellationToken);
}
Run Code Online (Sandbox Code Playgroud)

#2使用TaskCompletionSource

然后我尝试将结果包装成一个TaskCompletionSource所以我只有一个任务.

public virtual Task<IDataReader> ExecuteReaderAsync(IDbCommand dbCommand, CancellationToken cancellationToken)
{
    var taskCompletionSource = new TaskCompletionSource<IDataReader>();
    var sqlCommand = CheckIfSqlCommand(dbCommand);
    PrepareExecuteReader(dbCommand);

    var reader = Task<IDataReader>
        .Factory
        .FromAsync(sqlCommand.BeginExecuteReader, sqlCommand.EndExecuteReader, null)
        .Result;

    taskCompletionSource.SetResult(reader);

    return taskCompletionSource.Task;
}
Run Code Online (Sandbox Code Playgroud)

#3直接返回任务

我的最终解决方案是直接返回我创建的任务而不是包装它.

public virtual Task<IDataReader> ExecuteReaderAsync(IDbCommand dbCommand, CancellationToken cancellationToken)
{
    var sqlCommand = CheckIfSqlCommand(dbCommand); …
Run Code Online (Sandbox Code Playgroud)

.net c# ado.net .net-4.0 task-parallel-library

5
推荐指数
1
解决办法
1031
查看次数

MVVMCross MvxBind,将多个值绑定到一个属性

如何使用布尔值的组合,enabledMvxBind按钮上设置属性?

例如:

使用一个布尔值,绑定通过以下方式实现:

<Button
      android:text="Next"
      local:MvxBind="Enabled IHaveDoneEverything"/>
Run Code Online (Sandbox Code Playgroud)

但是如何使用多个布尔值实现它呢?

我试过的东西不起作用:

  • 在axml中使用OR语句. local:MvxBind="Enabled (IHaveDoneThis | IHaveDoneThat)"
  • 在我的ViewModel中使用额外的属性.这不起作用,因为该属性未被"设置",因此未在视图中更新.

    public bool IHaveDoneAtleastSomething 
    { 
        get { return (IHaveDoneThis | IHaveDoneThat); } 
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用自定义valueconverter.

    local:MvxBind="Enabled [IHaveDoneThis , IHaveDoneThat], Converter=MultipleBooleansToOneBooleanUsingORValueConverter"/>
    Run Code Online (Sandbox Code Playgroud)

c# android valueconverter mvvmcross mvxbind

3
推荐指数
1
解决办法
1820
查看次数