C# 为什么这个单元测试抛出一个;“未找到元素”;例外?
我为我的C#项目创建了一个非常基本的单元测试。该应用程序是基于UWP的厚客户端,因此我使用通用单元测试。我运行了测试,但测试失败,并显示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
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);
}