小编Mat*_*att的帖子

为什么在同一个测试项目程序集中调用[AssemblyInitialize]和[AssemblyCleanup]两次?

我认为这些属性的全部目的是每个程序集只运行一次.我有一个简单的类如下:

[TestClass]
public class AssemblyIntegrationTestSetup
{
    public AssemblyIntegrationTestSetup() { }
    public TestContext TestContext { get; set; }

    [AssemblyInitialize]
    public static void SetupIntegrationTests(TestContext context)
    {
         WindowsServiceService.Instance.StartService("Distributed Transaction Coordinator");
    }

    [AssemblyCleanup]
    public static void TeardownIntegrationTests()
    {
          WindowsServiceService.Instance.StopService("Distributed Transaction Coordinator");
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行测试套件时,程序集级Initialize和Cleanup方法执行两次.以下是关于我的环境的详细信息:

  1. 所有测试类都在同一个项目/程序集中.
  2. 我有按命名空间分隔的集成和单元测试.
  3. 对于集成测试,我使用MSTextExtensions来允许回滚数据库事务.
  4. 我也开始/停止MS SQL Server DTC服务,这是回滚功能所必需的.我希望每个测试套件运行一次(我发现最好的折衷方案是使用汇编级属性).代码可以工作,但它执行两次.
  5. 如果重要的话,我在一些测试中也使用了Microsoft Moles Framework.

观察到的行为类似于:

AssemblyInitialize         

Class1.TestInitialize
Class1.TestMethod1
Class1.TestCleanup

AssemblyInitalize         <-- //This shouldn't be happening right?

Class2.TestInitialize
Class2.TestMethod1
Class2.TestCleanup

Class2.TestInitialize
Class2.TestMethod2
Class2.TestCleanup

Class5.TestInitialize
Class5.TestMethod1
Class5.TestCleanup

Class7.TestInitialize
Class7.TestMethod1
Class7.TestCleanup

//More random bouncing around then...

AssemblyCleanup …
Run Code Online (Sandbox Code Playgroud)

integration-testing unit-testing mstest visual-studio-2008

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

与MSTest相比,NUnit的速度要快多少

罗伊Osherove,作者的艺术单元测试,已经评论在博客上说的很多东西NUnit的所谓做更好,这是快就是其中之一.

我的问题是,如果有的话,速度有多快?我们在谈论一个数量级吗?10%?50%?

我问这个是因为目前我无法比较这两者.我正在尝试将我的测试项目设置为双模式,以便我可以在它们之间切换.不幸的是,我遇到了NUnit与最新版本的Microsoft Moles集成的问题,并且NUnit与第三方库存在冲突(显示与log4net相关).

到目前为止,MSTest在Visual Studio 2008中似乎更容易使用.NUnit的所有版本问题和兼容性问题(至少对我来说)都指导我选择MSTest作为项目的框架(尽管我可能保持双模式)选项).MSTest的另一个优点是我仍然可以使用大多数NUnit断言:

using Assert = NUnit.Framework.Assert;
using Is = NUnit.Framework.Is;
Run Code Online (Sandbox Code Playgroud)

但是......如果在NUnit中速度确实快得多,那么我宁愿使用它,尽管有痛点.

最后,VS2010的MSTest速度是否有任何提升

performance nunit unit-testing mstest

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

使用适配器模式包装系统对象(File,ServiceController等)与单元测试绕行有什么好处?

请考虑以下停止服务的方法:

Public Function StopService(ByVal serviceName As String, ByVal timeoutMilliseconds As Double) As Boolean

    Try
        Dim service As New ServiceController(serviceName)
        Dim timeout As TimeSpan = TimeSpan.FromMilliseconds(timeoutMilliseconds)

        service.[Stop]()

        If timeoutMilliseconds <= 0 Then
            service.WaitForStatus(ServiceControllerStatus.Stopped)
        Else
            service.WaitForStatus(ServiceControllerStatus.Stopped, timeout)
        End If

        Return service.Status = ServiceControllerStatus.Stopped

    Catch ex As Win32Exception
        'error occured when accessing a system API'
        Return False
    Catch ex As TimeoutException
        Return False
    End Try

End Function
Run Code Online (Sandbox Code Playgroud)

为了对单元测试方法我基本上有两个选择:

  1. 使用Adapter模式将ServiceController我需要的类的方法包装到我可以控制的接口中.然后可以将此接口注入服务类(也称为控制反转).这样我就可以使用松散耦合的代码,并可以使用传统的模拟框架进行测试.
  2. 按原样保留类,并使用Microsoft Moles(或任何其他代码绕行框架)拦截调用ServiceController以返回预设结果以进行测试.

我同意对于使用"传统"单元测试方法的域模型代码最有意义,因为这会导致设计最容易维护.但是,对于处理与Windows API相关的东西(文件系统,服务等)的.net实现的代码,通过额外的工作获得"传统的"可测试代码是否真的有优势?

我很难看到将Microsoft Moles用于诸如ServiceController(或File对象)之类的东西的缺点.在这种情况下,我真的没有看到采用传统方法的任何优势.我错过了什么吗?

c# vb.net unit-testing mocking

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

vb.net创建数据表?

我正在使用vb.net/winforms.如何将包含三列的10行转换为DataSet/DataTable?

线条是这样的:

Item-1, $100, 44

Item-2, $42, 3

etc
Run Code Online (Sandbox Code Playgroud)

vb.net datatable

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

使用XAML/WPF实现复杂曲线编辑器的策略

我想实现一个相当复杂的CurveEditor,它必须支持通常的要求,例如:

  • 可自由伸缩和可移动的轴
  • 每个曲线点的不同插值类型(线性,立方,样条)
  • 切线(连接和断开)
  • 通过围栏或单击选择一个或多个点进行编辑(移动,缩放,删除)
  • 仅显示所选曲线点的手柄和高光

CurveEditorComponent的示例图

我不想操纵实际的WPF曲线,但是现有的带有键/值/切线的模型设置并从我们的实现中采样曲线的精确形状.

我已经收集了一些实现自定义UserControls和模板的经验.但我想确保,我不会错过任何明显的解决方案.我计划使用这个通用的XAML树:

  • CurveEditor - 包含所有内容的窗口
    • MainThumb:启用拖动和缩放编辑器范围
    • XAxis:UserControl在左侧以某种比例递增
    • YAxis:UserControl在底部有一定比例
    • 曲线:画布保持曲线
      • 曲线:用于单条曲线的UserControl
        • CurveName - 曲线的标签
        • CurveLine - DrawingVisual将通过对样条函数的内部实现进行采样来呈现实际曲线.
        • CurveEditPoints - 包含所有编辑点的画布
          • CurveEditPoint - 单个编辑点的UserControl
            • LeftTangent - 左切线控制柄的UserControl
              • LeftTangentThumb - 用于修改句柄
            • RightTangent - 用于右切线控制柄的UserControl
              • RightTangentThumb - 用于修改句柄
          • CurvePointCenter - 实际点的可视化,选择状态和插值类型.
            • CurvePointThumb - 用于选择和拖动点的拇指

我知道,这是一个非常复杂的问题,我不是要求实际实施.我对以下问题感兴趣:

  1. 你能推荐一些可能对我有帮助的教程或书籍吗(我已经有了Illustrated WPF,WPF Control Development Unleashed,还有其他一些)
  2. 像Tangents这样的次要元素应该是单独的UserControls吗?
  3. 什么容器最适合托管个人"曲线","EditPoints"和"Tangents".现在,我使用Canvas和Canvas.SetLeft/SetTop定位孩子,但感觉"奇怪".
  4. 我应该使用像Path或DrawingVisual-Classes这样的"形状"来实现实际表示.路径是直截了当的,但我担心数百个CurvePoints的性能.
  5. 我应该使用变换来旋转切线还是可以在文件后面的代码中进行一些三角测量数学运算?
  6. 结构是否大致有意义,或者您是否建议采用完全不同的方法?

architecture wpf user-interface xaml user-controls

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

如何将分支逻辑保存到数据库中?

我们正在为内部使用构建调查引擎.我想知道如何将问题分支逻辑保存到数据库中?以前做过这个的任何机构还是对数据库架构的任何想法?

如果用户回答了答案,我们需要根据添加到问题中的逻辑跳过下一个问题.每个问题都可以添加多个逻辑.

例如:

Question: Is it Sunny, Raining or Cloudy?
Answer: Raining.
The next question should be based on the previous answer.
if(Raining)
{
}

if(Sunny)
{
}

if(Cloudy)
{
}
Run Code Online (Sandbox Code Playgroud)

如何将上述内容保存到数据库并从那里开始?

有什么好主意吗?

logic branch survey

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

git-instaweb和git-clone

我使用git-instaweb在我的本地机器上设置了一个git webserver.

现在我希望能够从那个回购中克隆,但是当我尝试时

git clone http://localhost:1234 它给了我一个错误:

fatal: http://localhost:1234/info/refs not found: did you run git update-server-info on the server?
Run Code Online (Sandbox Code Playgroud)

git update-server-info没有帮助.有人有解决方案吗?

先感谢您.

git

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

WPF:如何避免图像离开Canvas的边界?

我有一个画布作为图像查看器.它的背景用于放置图像,我想在其上放置另一个图像.所以,场景是这样的:

 <Canvas Name="VisorCanvas"  Height="514"  Width="720">
   <Canvas.Background>
   <ImageBrush />
   </Canvas.Background>
   <Image Name="foreground"  />
</Canvas>
Run Code Online (Sandbox Code Playgroud)

我在后面的代码(C#)中动态插入图像.

问题是如果图像太大,那么图像会超出Canvas的边界.例如:我有一个不相关的背景图像,我想通过以下方式在Canvas面板(在其背景之上)显示一个正方形:

  • 在任何情况下,方形图像都将调整大小.
  • 如果它比帆布的尺寸小,我只是展示它.
  • 如果它在任何尺寸(宽度或高度)都更大,我需要裁剪它或设置透明图像的一部分.这样做我实现了电视模式或类似的东西,因为图形总是看起来在画布的"内部"(虽然部分被裁剪)

我该怎么办?我试过了:

  • 使用CroppedBitmap裁剪图像但不准确.
  • 要通过额外的opacityMask图像使用透明度,但我需要从原始图像创建一个掩码位图(具有透明度),我不知道该怎么做.
  • 要使用RenderTargetBitmap创建"照片"并使用此方法的结果替换图像,但我不能.

如果有人能够阐明它,我将不胜感激.

wpf transparency canvas

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

依赖注入 - 与数据传输对象(DTO)一起使用?

考虑下面的代码(已经简化).我有一个服务类,它返回一个特定DTO对象的列表,每个对象都实现自己的特定接口.在实际代码中,当我使用遗留代码时,通过迭代数据集来填充这些代码.

问题:

  1. 我们如何创建/使用DTO而不用新增或使用Service Locator反模式?在Composition Root中组合一个空的DTO对象并通过构造函数将它注入Service类没有多大意义,因为我实际上在填充列表时使用DTO作为排序的临时变量.

  2. 在代码中,您可以看到我新建DTO的示例.但是,如果我首先让DTO不实现接口,这并没有好多少.那么,他们不应该实现接口,因此不使用DI与DTO?


public class Services : IServices
{    
    public IList<IDTO> GetDTOs()
    {    
        ...
        List<IDTO> dtos = new List<IDTO>();
        foreach (c in d) 
        {
            DTO dto = new DTO();
            dto.x = c.x;
            dto.y = c.y;
            dto.z = c.z;
            dtos.Add(dto);
        }
        return dtos;
    }    
}
Run Code Online (Sandbox Code Playgroud)

dependency-injection anti-patterns interface dto service-locator

6
推荐指数
2
解决办法
3136
查看次数

有更好的设计选择吗?

免责声明:我很乐意在这个项目中使用依赖注入,并且全面地采用基于接口的松散耦合设计,但是在这个项目中使用了依赖注入.另外,SOLID设计原则(以及一般的设计模式)在我工作的地方是外国的,我自己也是很多人的新手.因此,在为此问题提出更好的设计时,请考虑到这一点.

这是我正在研究的代码的简化版本,因此它可能看起来很人为.如果是这样,我道歉.考虑以下类:

// Foo is a class that wraps underlying functionality from another 
// assembly to create a simplified API. Think of this as a service layer class,
// a facade-like wrapper. It contains a helper class that is specific to
// foo. Other AbstractFoo implementations have their own helpers.

public class Foo : AbstractFoo
{
    private readonly DefaultHelper helper;
    public override DefaultHelper Helper { get { return helper; } }

    public Foo() …
Run Code Online (Sandbox Code Playgroud)

c# oop maintainability design-patterns

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