Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这个单元测试抛出一个;“未找到元素”;例外?_C#_.net_Unit Testing_Uwp - Fatal编程技术网

C# 为什么这个单元测试抛出一个;“未找到元素”;例外?

C# 为什么这个单元测试抛出一个;“未找到元素”;例外?,c#,.net,unit-testing,uwp,C#,.net,Unit Testing,Uwp,我为我的C#项目创建了一个非常基本的单元测试。该应用程序是基于UWP的厚客户端,因此我使用通用单元测试。我运行了测试,但测试失败,并显示System.Exception:Element not found消息。它还说 必须在与CoreWindow关联的线程上调用GetForCurrentView 我已经添加了主项目作为测试项目的参考 以下是一个最低限度的工作示例: namespace MyProjectTests { [TestClass] public class Exampl

我为我的C#项目创建了一个非常基本的单元测试。该应用程序是基于UWP的厚客户端,因此我使用通用单元测试。我运行了测试,但测试失败,并显示
System.Exception:Element not found
消息。它还说

必须在与CoreWindow关联的线程上调用GetForCurrentView

我已经添加了主项目作为测试项目的参考

以下是一个最低限度的工作示例:

namespace MyProjectTests
{
    [TestClass]
    public class ExampleObjectTest
    {
        private ExampleObject exampleObject;

        [TestInitialize]
        public void Setup()
        {
            exampleObject = new ExampleObject();
        }

        [TestMethod]
        public void RequestParametersIsNotNullTest()
        {
            Dictionary<string, string> parameters = exampleObject.MethodThatReturnsDictionary();
            Assert.IsNotNull(parameters);
        }
    }
}

此方法不返回null,但测试仍然失败。是否需要进一步的设置来确保此测试通过?

您必须在助手类中创建一个静态方法,以便在UI线程上执行给定的代码

ThreadHelper.cs:

    public static class ThreadHelper
    {

        public static IAsyncAction ExecuteOnUIThread(Windows.UI.Core.DispatchedHandler action)
        {
            return Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, action);
        }
    }
然后在TestMethod中:

        [TestMethod]
        public async Task RequestParametersIsNotNullTest()
        {
            Dictionary<string, string> parameters = new Dictionary<string, string>();
            await ThreadHelper.ExecuteOnUIThread(() =>
            {
               exampleObject.MethodThatReturnsDictionary();
            });
            Assert.IsNotNull(parameters);
        }
[TestMethod]
公共异步任务请求参数SISNotNullTest()
{
字典参数=新字典();
等待ThreadHelper.ExecuteonuThread(()=>
{
exampleObject.MethodThatReturnsDictionary();
});
Assert.IsNotNull(参数);
}

不要忘记用异步任务替换void

请发布完整的堆栈跟踪-这将使问题所在的位置更加清晰。@JonSkeet没问题。我已经编辑了这个问题。对,返回Dictionary的
方法正在调用
显示信息。GetForCurrentView
,它显然有点UI敏感,因为它取决于当前线程关联的窗口。。。该方法不是“不返回null”-它正在抛出一个异常…@JonSkeet-Yes。是否有适当的方法确保测试在正确的线程上运行?或者,在技术上,我不想测试在这种情况下也与视图交互的东西,因此对UWP进行模拟是否更合适?我恐怕对UWP了解不够,不能说,但如果这不是一段真正对UI敏感的代码,那么提取依赖项就很有意义了。
        [TestMethod]
        public async Task RequestParametersIsNotNullTest()
        {
            Dictionary<string, string> parameters = new Dictionary<string, string>();
            await ThreadHelper.ExecuteOnUIThread(() =>
            {
               exampleObject.MethodThatReturnsDictionary();
            });
            Assert.IsNotNull(parameters);
        }