使用自定义控件时,Windows应用商店应用单元测试失败

时间:2013-05-14 09:39:31

标签: c# windows xaml windows-store

我有一个Windows应用商店应用程序(C#+ XAML),并希望为它创建一些单元测试。 我在我的解决方案中为此创建了单元测试项目,默认测试方法正常。 然后我添加了我的项目作为单元测试项目的参考,测试停止了工作:

------ Discover test started ------
========== Discover test finished: 1 found (0:00:00,8748072) ==========
------ Run test started ------
Updating the layout...

Copying files: Total 2 mb to layout...

Registering the application to run from layout...

Deployment complete. Full package name: "58d19822-a649-46ba-b3fd-36c60b2709d7_1.0.0.0_neutral__t4zwj4xd20b1w"

Failed to activate Windows Store app unit test executor. Error: The remote procedure call failed.
========== Run test finished: 0 run (0:00:05,0596667) ==========

我google了很多,发现一个解释错误的线程可以在App.xaml中,实际上我可以跟踪它到这个TextBlock:

<TextBlock Grid.ColumnSpan="2" controls:HighLightString.FullText="{Binding Path=FullName}" controls:HighLightString.SelectedText="{Binding DataContext.QueryText, ElementName=resultsPanel}" controls:HighLightString.FgColor="{StaticResource SAPHighlightColor}"  Style="{StaticResource TileTitleTextStyle}" Margin="20,0,0,0" TextTrimming="WordEllipsis"/>

如果我将其更改为:

<TextBlock Grid.ColumnSpan="2" Text="{Binding Path=FullName}" Style="{StaticResource TileTitleTextStyle}" Margin="20,0,0,0" TextTrimming="WordEllipsis"/>

测试运行正常但我不再在该文本块上有搜索突出显示。

我如何同时拥有 - 我的解决方案中的搜索亮点和运行单元测试?

3 个答案:

答案 0 :(得分:5)

这可能与https://connect.microsoft.com/VisualStudio/feedback/details/790477/winrt-mstest-runner-fails-when-using-ilist-t-properties-of-custom-types-from-xaml

有关

据我所知,在Xaml中使用某些自定义类型与WinRT单元测试运行器不兼容,因为在某些情况下这不会提供正确的IXamlType interface实现。

因此,您正在使用的这些可附加属性可能导致测试运行器为它们提供不正确的元数据。 (无法看到你的HighLightString类很难确定。但是你可以通过打开单元测试项目的混合模式调试并调试测试来验证是否是这种情况。配置Visual Studio来打破抛出所有CLR异常(而不仅仅是在未处理时),如果你最终在一个名为NotImplementedException的类型中遇到RunTimeXamlSystemBaseType(可能在其他几个例外之后),那么这就是你的问题遇到了。)

我过去曾经通过避免在我的App.xaml中放入相关类型来解决这个问题。如果您尝试加载相关的Xaml,则只会遇到此问题。 (如果你真的需要这些东西在全球范围内,那就没什么用了。)

答案 1 :(得分:0)

我有完全相同的问题 我在列表框的DataTemplate中使用 Adventureft Prism for Windows 8.1 Adventure Works购物示例的HighlightOnErrors行为。

<interactivity:Interaction.Behaviors>
                <behaviors:HighlightOnErrors PropertyErrors="{Binding Errors[Value], Mode=TwoWay}" 
                                                         OriginalStyleName="VariationTableItemTextBoxStyle" 
                                                         HighlightStyleName="HighlightVariationTableItemTextBoxStyle"/>
            </interactivity:Interaction.Behaviors>

行为正常,单元测试运行正常,但在Listbox Item emplate中没有这种行为。

答案 2 :(得分:0)

Microsoft的Connect网站上存在一个针对此问题的错误:https://connect.microsoft.com/VisualStudio/feedback/details/848688/unit-testing-windows-store-app-fails-when-style-contains-custom-attached-dependency-properties

列出的解决方法是引用应用程序的构建.exe而不是使用项目引用。我可以确认该解决方法确实有效。