小编Vin*_*Vin的帖子

如何在Visual Studio 2010中并行化数据驱动的单元测试?

我知道通过在测试解决方案中的.testresults文件中指定parallelTestCount属性,可以在多核机器上并行处理常规的ms-test单元测试(当然需要注意).像这样,

<Execution parallelTestCount="1">
    <TestTypeSpecific />
    <AgentRule name="Execution Agents"></AgentRule>
</Execution>
Run Code Online (Sandbox Code Playgroud)

更多信息请访问:http://blogs.msdn.com/b/vstsqualitytools/archive/2009/12/01/executing-unit-tests-in-parallel-on-a-multi-cpu-core-machine.aspx

但是,我有一个数据驱动的测试,类似这样,这只是一个测试,但输入来自csv并通过相同的测试运行1000个记录.

[DeploymentItem("InputDataRows.csv"), Timeout(37800000), DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", "|DataDirectory|\\InputDataRow.csv", "InputDataRow#csv", DataAccessMethod.Sequential)]                
[TestMethod]
public void RunProcessing()
{
    int userId = Convert.ToInt32(TestContext.DataRow[0].ToString());
    int connId = Convert.ToInt32(TestContext.DataRow[1].ToString());
    string xml = TestHelper.GetDataFromDb(userId, connId);
    a = doStuffA(xml); 
    b = doStuffB(xml);
    Assert.IsTrue(a == b);
}
Run Code Online (Sandbox Code Playgroud)

因为这是一个缓慢的过程,我正在寻找并行化这个单元测试.

顺序枚举的属性就是它访问数据的方式,另一种选择是随机的,这仍然是串行和不平行.

c# parallel-processing unit-testing mstest visual-studio

17
推荐指数
1
解决办法
1931
查看次数

如何将字符转换为等效的System.Windows.Input.Key枚举值?

我想写一个这样的函数,

        public System.Windows.Input.Key ResolveKey(char charToResolve)
        {
            // Code goes here, that resolves the charToResolve
            // in to the Key enumerated value
            // (For example with '.' as the character for Key.OemPeriod)

        }
Run Code Online (Sandbox Code Playgroud)

我知道我可以写一个巨大的Switch-case来匹配角色,但还有其他方法吗?这个问题是Key枚举的字符串可能与字符不匹配,因此Enum.IsDefined不起作用

有任何想法吗?

更新:这是在Windows环境中

.net c# enums key input

16
推荐指数
2
解决办法
3万
查看次数

对于自托管的ASP.Net Web API请求实体太大

我有一大块json需要发布到自托管的ASP.Net Web API服务.

我收到" 状态代码:413请求实体太大 "消息.

试图将以下内容放在webapi服务项目的app.config中.

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <customErrors mode="Off"/>
    <httpRuntime
        maxRequestLength="2147483647"
        executionTimeout="300" />
</system.web>
Run Code Online (Sandbox Code Playgroud)

这没有用.

我正在考虑以下两个选项.

  1. 可能使用LZW压缩库解压缩javascript中的数据,并在接收后在webapi端解码.
  2. 找到一种方法来允许webapi基础架构允许大量数据

我更喜欢第二种选择,但尚未找到如何实现它.

有什么指针吗?

c# json xmlhttprequest asp.net-web-api

13
推荐指数
1
解决办法
7343
查看次数

您在真实世界中使用的常见编程任务有哪些?

我正在制作一个列表,列出所有常规开发人员在实际应用程序开发中使用的所有常见编程任务.您在大多数常规LOB应用程序中重复使用的代码.即使它不常见,并且您认为将其添加到列表中也是值得的,请执行此操作.

让我先说:

  1. 从磁盘读取文本文件,将其加载到字符串
  2. 将字符串保存到文本文件
  3. 将业务对象序列化为XML
  4. 将XML从字符串和/或磁盘反序列化为业务对象
  5. 根据XSD架构验证XML字符串

现在轮到你了.

更新:让我说出为什么我想要这个清单.一旦我有大量的任务,我想为每个任务创建一个非常有效的代码的方便参考.因为每次我编写代码来执行其中一项任务时,我都可以简单地参考我的代码参考.我不希望我的代码在多个地方有所不同.我的第2步是为所有这些任务编写高效优雅的代码.

我想我应该把它作为博客文章.这是一个错误的地方吗?

list

12
推荐指数
2
解决办法
2789
查看次数

在MSTest中的运行时期间动态创建单元测试方法

在MSTest中是否有相当于SuiteBuilder的东西?到目前为止找不到一个.

我有一堆xml文件,每个文件都被视为映射到测试方法.因为有100个这样的并且为这些中的每一个手动编写测试,所以不是一个好主意.

因此,在nunit中,您可以实现ISuiteBuilder并让测试用例动态运行并显示为许多测试方法.

我正在寻找一种在MSTest中做同样事情的方法.

我查看了DataSource属性,但它满足每个测试方法1个数据源xml文件/ csv,迫使我编写100多个测试方法.我还希望将每个xml文件保持独立,并且不要将它们全部归入到一个巨大的文件中,在这种情况下它将变得不可维护.

有人试过这个或有任何建议吗?

nunit unit-testing mstest

9
推荐指数
1
解决办法
2231
查看次数

如何获得XElement的position()?

任何类似于/ NodeName/position()的XPath都会为您提供Node的位置,即它的父节点.

XElement(Linq to XML)对象上没有可以获取Element位置的方法.在那儿?

linq linq-to-xml

7
推荐指数
2
解决办法
4004
查看次数

在Parallel.ForEach中使用哈希表?

我有一个Parallel.ForEach循环在主体内部运行密集操作.

该操作可以使用Hashtable来存储值,并且可以重用于其他连续的循环项.我在密集操作完成后添加到Hashtable,下一个循环项可以在Hashtable中查找并​​重用该对象,而不是再次运行密集操作.

但是,因为我使用的是Parallel.ForEach,所以存在一个不安全的问题,导致Hashtable.Add和ContainsKey(key)调用不同步,因为它们可能并行运行.引入锁可能会导致性能问题.

这是示例代码:

Hashtable myTable = new Hashtable;
Parallel.ForEach(items, (item, loopState) =>
{
    // If exists in myTable use it, else add to hashtable
    if(myTable.ContainsKey(item.Key))
    {
       myObj = myTable[item.Key];
    }
    else
    {
       myObj = SomeIntensiveOperation();
       myTable.Add(item.Key, myObj); // Issue is here : breaks with exc during runtime
    }
    // Do something with myObj
    // some code here
}
Run Code Online (Sandbox Code Playgroud)

TPL库中必须有一些API,属性设置,可以处理这种情况.在那儿?

.net c# parallel-extensions task-parallel-library

7
推荐指数
1
解决办法
7703
查看次数

打开不属于项目的cs文件的任何方式使Intellisense工作?

我们理想需要的是,知道Microsoft如何处理XAML生成的代码(那些*.g.cs文件).如果您转到后面的XAML代码,即使*.g.cs文件不是项目的一部分,intellisense也会工作!


语境:

在自定义VS包中,我们需要有一些逻辑来在VS IDE中打开一个CS文件(不要让它成为项目的一部分),以允许用户编辑它.

我们将文档连接到Running文档表,并使用IVSRunningDocumentTable接收诸如Saving,Close和all之类的事件.效果很好.

现在的问题是,当文档被打开时,Intellisense无法工作,原因很简单,打开的文档不是项目的一部分(遗憾的是,我们不能这样做,我们不能让代码落后) .

c# vsx xaml visual-studio-2008 visual-studio

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

如何允许用户在WPF中向UI控件添加注释?

支持注释的WPF文档查看控件包括FlowDocumentReader和FlowDocumentScrollViewer,以及从DocumentViewerBase派生的控件,如DocumentViewer和FlowDocumentPageViewer.

内置的Annotations支持基于文档的控件在WPF中非常棒

我想知道如何将功能添加到WPF常用控件,如Button,TextBox,ListBox项等.想法是允许用户将UI屏幕上的一些注释传递给另一个用户.

首先想到的是继承DocumentViewerBase并创建自己的自定义控件.我不确定它会如何发挥作用.如果需要注释非自定义控件会怎样?

有没有人工作或看过这种功能?

任何指示都会有所帮助.

.net wpf xaml controls annotations

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

使用多种控件在WPF窗口中搜索并突出显示任何文本

这基本上是在WPF窗口或用户控件中实现搜索/查找。假设您有一个WPF窗口,其中包含动态只读文本,其中一些在文本块上,一些在列表框中,在树视图中,在文本块中,等等。

用户应该能够在顶部的文本框中键入搜索词,并且无论该文本在窗口中出现在何处,都可以突出显示该搜索词。而且,该页面与FlowDocuments等无关,因此不能直接使用FlowDocumentReader。

称其为“控制文本搜索”,并突出显示搜索词,就像Google chrome浏览器对网页所做的那样。

以下SO线程可能会有所帮助,但不确定是否可以实现上述目标(我正在尝试将某些东西放在一起)

  1. 在WPF窗口中按类型查找所有控件
  2. WPF Listbox高亮显示ListBoxItem元素的一部分

这里有这篇文章,它也很有用,但可以用于“文档”而不是控件

  1. 搜索并突出显示WPF呈现页面上的所有文本

wpf search text full-text-search wpf-controls

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

如何将Xml属性绑定到Treeview节点,同时将XDocument数据绑定到WPF Treeview

我有一个XML需要数据绑定到WPF TreeView.这里的XML可以有不同的结构.TreeView应该是数据绑定通用的,足以加载任何层次结构的排列.但是,节点上的XAttribute(称为Title)应该数据绑定到TreeViewItem的头文本不是节点名.

要绑定的XML:

<Wizard>
  <Section Title="Home">
    <Loop Title="Income Loop">
      <Page Title="Employer Income"/>
      <Page Title="Parttime Job Income"/>
      <Page Title="Self employment Income"/>
    </Loop>
  </Section>
  <Section Title="Deductions">
    <Loop Title="Deductions Loop">
      <Page Title="Travel spending"/>
      <Page Title="Charity spending"/>
      <Page Title="Dependents"/>
    </Loop>
  </Section>
</Wizard>
Run Code Online (Sandbox Code Playgroud)

XAML:

<Window x:Class="Wpf.DataBinding.TreeViewer"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Wpf.DataBinding"
    Title="TreeViewer" Height="300" Width="300">
    <Window.Resources>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Elements}" x:Key="TVTemplate">
            <TreeViewItem Header="{Binding Path=Name}"/>
        </HierarchicalDataTemplate>
    </Window.Resources>
    <StackPanel>
        <TreeView x:Name="_treeView" Style="{StaticResource TVallExpanded}"
                ItemsSource="{Binding Path=Root.Elements}"
                ItemTemplate="{StaticResource TVTemplate}" />
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

XAML的代码隐藏,它将XML加载到XDocument并将其绑定到TreeView …

c# data-binding wpf treeview xaml

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

对于数据库来说,允许应用程序始终通过SP执行CRUD操作是最佳做法吗?

我听说过背后的推理,如果其他人认为这是一个最好的做法/好主意,我很好奇.

一个原因是,限制直接访问数据库表,并强制应用程序/用户使用SP(存储过程)执行CRUD操作将允许DBA

  1. 在将SP转移到生产之前批准/审查SP的细粒度控制
  2. 避免开发人员编写的随机查询可能导致服务器负载/其他服务器问题

这意味着开发人员无法在表上编写Linq查询(尽管可能涉及SP的Linq查询)这也意味着开发人员必须忘记编译时检查以及完全控制数据,而主要是使用其他语言( SQL)处理数据.

我并不反对这一点,也不认为这是一个好主意.我很想知道其他人的想法.这种方法的任何其他优点和缺点是什么.

更新:正如托马斯在他的回答中所提到的,我倾向于认为SP是逻辑并且使用"SQL中的数据库编程"来做逻辑是可以的,只要它不是"业务逻辑".业务逻辑需要分离,编译时检查和集成检查点,什么不需要.

database database-design linq-to-sql

3
推荐指数
1
解决办法
413
查看次数

如何为visual studio项目添加和编译自定义'Platform'开关?

我们希望在Visual Studio中为我们的项目提供两个自定义平台开关(配置管理器中的平台下拉列表).

例如,一个用于'桌面',一个用于'Web'.然后,目标构建任务基于平台开关以自定义方式编译代码.我们不想添加到Debug Release开关,因为我们需要为每个桌面和Web平台提供这些开关.

我们发现尝试这种方法的一种方法是修改.csproj文件以添加这样的东西

<Platform Condition=" '$(Platform)' == '' ">Desktop</Platform>
Run Code Online (Sandbox Code Playgroud)

并添加属性组,如,

    <PropertyGroup Condition=" '$(Platform)' == 'Web' ">
        <DefineConstants>/define Web</DefineConstants>
        <PlatformTarget>Web</PlatformTarget>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Platform)' == 'Desktop' ">
        <DefineConstants>/define Desktop</DefineConstants>
        <PlatformTarget>Desktop</PlatformTarget>
      </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

但是这仍然无效,编译器会抛出错误

/ platform的选项'Desktop'无效; 必须是anycpu,x86,Itanium或x64

那么它必须是其中一个选项,我们不能添加我们的自定义平台吗?

有没有人能够做到这一点?任何指针都会有所帮助.

更新:使用DebugDesktop和ReleaseDesktop将使用户更加复杂.因为"桌面"和"网络"实际上是平台,并且还有能力在下拉列表中添加新平台(即),我认为"平台"切换应该用于完全相同的目的.

c# visual-studio-2008 visual-studio

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