小编Jul*_*ien的帖子

如何使用异步方法对ViewModel进行单元测试.

我不知道从哪里开始,但让我简要介绍一下我在哪里以及我想要实现的目标.我对MVVM上的单元测试很陌生,并且很难测试我使用PRISM委托命令属性公开的命令.我的委托命令调用必须等待的异步方法,以便我可以获得实际结果.下面是一个asyc方法,由我想测试的方法调用.

 async void GetTasksAsync()
        {
            this.SimpleTasks.Clear();
            Func<IList<ISimpleTask>> taskAction = () =>
                {
                    var result = this.dataService.GetTasks();
                    if (token.IsCancellationRequested)
                        return null;
                    return result;
                };
            IsBusyTreeView = true;

            Task<IList<ISimpleTask>> getTasksTask = Task<IList<ISimpleTask>>.Factory.StartNew(taskAction, token);
            var l = await getTasksTask;          // waits for getTasksTask


            if (l != null)
            {
                foreach (ISimpleTask t in l)
                {
                    this.SimpleTasks.Add(t); // adds to ViewModel.SimpleTask
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

这里也是我的VM中的命令,它调用上面的异步方法

  this.GetTasksCommand = new DelegateCommand(this.GetTasks);
      void GetTasks()
        {
                GetTasksAsync();
        }
Run Code Online (Sandbox Code Playgroud)

现在我的测试方法就像

 [TestMethod]
        public void Command_Test_GetTasksCommand()
        {
          MyViewModel.GetTaskCommand.Execute(); // this should populate …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing prism mvvm async-await

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

检测日语字符输入和“ Romajis”(ASCII)

我希望能够检测到用户:

  1. 输入日语字符(汉字或假名)
  2. 输入罗马字符(专有)

目前,我正在使用像这样的ASCII范围(C#语法):

string searchKeyWord = Console.ReadLine();
var romajis = from c in searchKeyWord where c >= ' ' && c <= '~' select c;

if (romajis.Any())
{
    // Romajis
}
else
{
    // Japanese input
}
Run Code Online (Sandbox Code Playgroud)

有没有更好,更快(更强...)的方法来做到这一点?

编辑:问题可以推广到具有非ASCII字符集的任何其他语言。

c# unicode ascii char non-ascii-characters

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