我目前正在尝试使用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上测试确实有效.
我正在构建一个使用ADO.NET的.NET 4.0应用程序,所以我不能使用async/await.我不想要一个解决方案,但我想知道以下哪些实现最好,为什么.我的单元测试通过所有三个实现,但我想知道这三个之间的区别.
在我的第一个实现中,我将任务包装在另一个任务中.我认为搞两个任务对性能不利,但我不确定.
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)
然后我尝试将结果包装成一个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)
我的最终解决方案是直接返回我创建的任务而不是包装它.
public virtual Task<IDataReader> ExecuteReaderAsync(IDbCommand dbCommand, CancellationToken cancellationToken)
{
var sqlCommand = CheckIfSqlCommand(dbCommand); …
Run Code Online (Sandbox Code Playgroud) 如何使用布尔值的组合,enabled
在MvxBind
按钮上设置属性?
例如:
使用一个布尔值,绑定通过以下方式实现:
<Button
android:text="Next"
local:MvxBind="Enabled IHaveDoneEverything"/>
Run Code Online (Sandbox Code Playgroud)
但是如何使用多个布尔值实现它呢?
我试过的东西不起作用:
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)