标签: vs-unit-testing-framework

Visual Studio C#单元测试 - 使用各种/多个测试初始化​​运行单元测试,多次运行相同的单元测试?

我想要做的是:

  1. 创建一堆单元测试.
  2. 创建各种不同的模拟初始化/组合,输入变量等.
  3. 基于某些参数,针对一组此类初始化运行每个给定的单元测试.

我该怎么做这样的事情?

是否已经有任何框架来处理这个问题(即在更改初始化时多次运行给定的测试)?你能否提出任何可以做到这一点的设计或想法?

我知道单元测试框架的工作原理.我自己使用NUnit和Rhino嘲笑.

下面显示的是我需要的一个例子.

[Test Initialize]
Setup( <-possible parameter-> )

[Test Method]
TestA()
Run Code Online (Sandbox Code Playgroud)

现在我希望TestA()多次运行.每次Test initialize都会选择另一个初始化组合.

更多澄清

让我们假设测试需要变量A,B,C.它们中的每一个都是非常复杂的对象,最终结果是可以形成大量的组合.所以我希望以某种方式我可以创建一个测试初始化​​,可以迭代这样的组合列表,所以它会初始化它们,运行TESTA,返回列表中的下一个初始化,再次运行TESTA等等,直到列表用完了.接下来,它为TESTB选择另一个列表,并再次遵循此过程.

至少我希望有一些能力能够运行给定的TEST功能n次.其余的我知道我可以建立一旦这是可能的

c# unit-testing visual-studio vs-unit-testing-framework

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

如何在Visual Studio单元测试框架中将视图呈现为字符串?

如果我创建一个新的MVC 5项目(使用单元测试)并使用来自流行的SO答案的片段为我的控制器创建一个新的超类,则很容易将视图的内容呈现为字符串:

HomeController.cs

public class HomeController : StringableController
{
    public ActionResult StringIndex()
    {
        string result = RenderRazorViewToString("Index", null);

        return Content(result);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我访问/Home/StringIndex,我会返回该视图的原始HTML.整洁(即使不是很有用)!但是在.Tests项目中,如果我尝试在单元测试中测试StringIndex()...

HomeControllerTest.cs

[TestClass]
public class HomeControllerTest
{
    [TestMethod]
    public void StringIndex()
    {
        HomeController controller = new HomeController();

        ContentResult result = controller.StringIndex() as ContentResult;
        string resultString = result.Content;

        Assert.IsTrue(resultString.Contains("Getting started"));
    }
}
Run Code Online (Sandbox Code Playgroud)

......没有这样的运气.调用controller.StringIndex()从单元测试创建ArgumentNullExceptionSystem.Web.Mvc.ViewEngineCollection.FindPartialView()被称为在上述的代码段,考虑的controllerContextnull.我已经尝试了几起订量为基础的办法(修改后的版本SetUpForTest()MvcMockHelpers)嘲笑了controllerContext,但是这可能是错误的做法,因为:1)这两种方法都不是专门针对Visual Studio中的单元测试,以及2)我不能完全肯定为了成功渲染视图,需要真实与模拟的内容.

在Visual …

asp.net-mvc unit-testing razor vs-unit-testing-framework visual-studio-2013

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

如何使我的 Visual Studio 2017 项目不是测试项目,同时仍然引用 NUnit

我有一个带有单元测试助手类的库。我在这个项目中引用了 NUnit,但现在 Visual Studio 认为这个项目是一个测试项目,并抱怨没有发现任何测试。该项目并不是一个测试项目,只是一个引用 NUnit 的常规 .net 标准库。

我想“说服”视觉工作室这不是一个测试项目。有任何想法吗?

技术细节:该项目是一个.Net Standard 2.0项目,我引用了以下NuGet包:

  • 最小起订量 4.10.0
  • 起订量.AutoMock 1.2.0.111
  • NUnit 3.10.1

我使用 Visual Studio 2017 Enterprise 版本 15.8.4

该库的用途示例:

  public abstract class AutoMockerTestBase
  {
     protected AutoMocker AutoMocker { get; private set; }

     [SetUp]
     public virtual void SetUp()
     {
        AutoMocker = new AutoMocker(MockBehavior.Strict);
     }

     [TearDown]
     public virtual void TearDown()
     {
        AutoMocker.VerifyAll();
     }
  }
Run Code Online (Sandbox Code Playgroud)

要重现该问题:

  • 将 .net standard2.0 类库项目添加到解决方案。
  • 参考 NUnit

现在请注意,视觉工作室将项目图标更改为测试项目。

帮助我找到一种方法,让 Visual Studio 不认为该项目是一个测试项目,并确保 VS 不会尝试在该项目中发现测试。

编辑:查看“测试”输出我发现:

[16/09/2018 10:12:55 Warning] Exception NUnit.Engine.NUnitEngineException, …
Run Code Online (Sandbox Code Playgroud)

c# nunit vs-unit-testing-framework visual-studio-2017

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

如何在EF4中回滚单元测试TearDown?

在我关于在EF4中回滚交易的研究中,似乎每个人都参考了这篇博文或提供了类似的解释.在我的场景中,我想在单元测试场景中执行此操作,我想在我的单元测试上下文中回滚几乎我所做的一切,以防止更新数据库中的数据(是的,我们会增加计数器但是没关系).为了做到这一点,最好遵循以下计划吗?我错过了一些概念或其他任何重要的概念(除了我SetupMyTestPerformMyTest函数不会真的存在这种方式)?

[TestMethod]
public void Foo
{
  using (var ts = new TransactionScope())
  {
    // Arrange
    SetupMyTest(context);

    // Act
    PerformMyTest(context);
    var numberOfChanges = context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
    // if there's an issue, chances are that an exception has been thrown by now.

    // Assert
    Assert.IsTrue(numberOfChanges > 0, "Failed to _____");

    // transaction will rollback because we do not ever call Complete on it
  }
}
Run Code Online (Sandbox Code Playgroud)

c# unit-testing entity-framework transactions vs-unit-testing-framework

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

“Microsoft.ACE.OLEDB.12.0”提供程序未在本地计算机上注册

我已经按照博客条目中的描述安装了“Microsoft Access Database Engine 2010 Redistributable”

http://danilcai.blogspot.com/2011/02/solution-run-jet-database-engine-on-64.html

它适用于我的 Windows 窗体应用程序。我现在想添加一些单元测试,并且在运行单元测试时出现上述错误。我已经检查了我的参考资料,但似乎无法弄清楚为什么它在应用程序中而不是在单元测试中有效。

我正在 VS2010 上进行 Windows 7 Ultimate x64 安装。

有人可以帮帮我吗 ?

c# oledb oledbconnection vs-unit-testing-framework

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

如何在linux中配置和设置谷歌测试框架

我是g测试的新手,这是我想要做的事情(在Linux服务器上从控制台):1)用C++创建一个小项目(带有包含函数原型的头文件,带有函数的cpp文件)在它和另一个主调用已在头文件中定义的函数的cpp文件中)2)配置g测试以编写单元测试并测试在步骤1中创建的函数3)创建另一个带有几个单元测试的小项目(不同用于测试在步骤1)中在项目下创建的函数的方案

任何人都可以告诉我们如何配置g测试和用一个例子创建的项目?

提前致谢

c++ linux googletest vs-unit-testing-framework

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

LogicalCallContext在Console App中流过await但不在VS UnitTest中流动

我正在使用Logical CallContext在一系列等待中回传信息.有趣的是,在我的测试控制台应用程序中,一切正常.但是,当在VS UnitTest的上下文中运行我的单元测试时,调用上下文似乎没有流过等待.

方法内部:SendRequestAsyncImpl正在设置调用上下文,当我在方法返回时从断点查询逻辑调用上下文时,调用上下文设置得很好.

但是,在await返回以下行之后:

Message response = await SendRequestAsyncImpl(m, true).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

逻辑调用上下文为空.我想也许可以通过设置ConfigureAwait(true)而不是false来解决问题.但这并不能解决问题.

无论我尝试流动什么,甚至在SendRequestAsyncImpl中设置一个简单的值类型,如:

System.Runtime.Remoting.Messaging.CallContext.LogicalSetData("flag", true);
Run Code Online (Sandbox Code Playgroud)

await后无法检索.

为什么这可以从我的控制台应用程序工作 但不是从我的单元测试?有什么不同?(我已经看到了其他一些涉及AppDomain问题的堆栈溢出问题.但是我甚至无法在整个等待期间编组一个bool.编组数据的能力似乎不是问题.)

c# remoting vs-unit-testing-framework async-await

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

忽略本机VC++项目中的单元测试

如何TEST_IGNORE()在Visual Studio 2015中的本机VC++单元测试项目中使用宏?我习惯[Ignore]在C#中使用,但我显然在VC++中遗漏了一些东西.

这是我尝试过的,但TEST_IGNORE()宏扩展为无效代码(许多"意外令牌"和"语法错误:'{'"错误......)

TEST_CLASS(MyTests)
{
   public:
   TEST_IGNORE()
   TEST_METHOD(TestSomething)
   {
     /*Test code is here*/
   }
};
Run Code Online (Sandbox Code Playgroud)

unit-testing visual-c++ vs-unit-testing-framework

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

缺少 Microsoft.Data.Tools.Schema.Sql.UnitTesting。再次

该错误很旧,但 MS 到目前为止还没有修复它。

我有一个 VS2015 解决方案(许多项目,主要是 ASP.NET 一个),我在 VS 2017 中打开了它。

这是我尝试构建它时看到的:

所以,我想,好吧,有些引用坏了,我进入了项目引用,删除了这两个(...Sql.UnitTesting 和 ...Tools.Components),并尝试将它们添加回来。我看到了什么?当然,这个:

版本错误,它是15.1.0.0而不是之前的15.0.0.0(对于两个 DLL)。大不了,你说,但它仍然不能编译:

它告诉我版本不匹配,我必须在 web.config 文件中创建一些程序集绑定。我做了,首先手动,然后通过双击警告,正如它所建议的那样。什么都没有改变。我仍然无法构建我的项目。

以前的 SO 问题(对 Microsoft.Data.Tools.Schema.Sql.UnitTesting 的自动引用VS2010 上的 Microsoft.VisualStudio.TestTools.UnitTesting 命名空间在哪里?)没有多大帮助,我无法删除 SSDT 组件,因为它破坏了完全加载网络项目。而我的项目不是任何类型的 SQL 测试项目。它只是一个普通的 ASP.NET 4 Web 应用程序。

我能做些什么来解决这个问题?

asp.net-mvc build-error vs-unit-testing-framework visual-studio-2017 sql-server-unit-testing

6
推荐指数
3
解决办法
9612
查看次数

如何在 Azure DevOps 管道中添加单元测试

构建运行良好,但在添加使用经典编辑或我的解决方案的构建管道时看不到单元测试结果。

并且代码覆盖率也是空白的。我的解决方案中有两个项目和测试项目。单元测试任务返回结果如下:

    A total of 14 test files matched the specified pattern.
           No test is available in d:\a\1\s\src.net... 
Make sure that test discoverer & executors are registered and platform & framework version settings are appropriate and try again.
            Results File: d:\a\_temp\TestResults\VssAdministrator_fv-az686_2019-12-26_06_10_28.trx
            Attachments:
              d:\a\_temp\TestResults\d301a26b-d99f-4b4e-bbe8-c95e588ee1c5\VssAdministrator_fv-az686 2019-12-26 06_10_20.coverage
            Vstest.console.exe exited with code 0.
            **************** Completed test execution *********************
            Test results files: d:\a\_temp\TestResults\VssAdministrator_fv-az686_2019-12-26_06_10_28.trx
            No Result Found to Publish 'd:\a\_temp\TestResults\VssAdministrator_fv-az686_2019-12-26_06_10_28.trx'.
            Created test run: 1006840
            Publishing test results: 0
            Publishing test results to test run '1006840'. …
Run Code Online (Sandbox Code Playgroud)

vs-unit-testing-framework azure-devops azure-pipelines

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