小编EF0*_*EF0的帖子

有没有办法让每个类运行一次SetUpFixture而不是每个名称空间运行一次?

场景
首先,我是新手测试 - 所以请耐心等待.在我的测试项目中,有一个Controllers文件夹.Controllers文件夹可能包含ControllerATest.cs,ControllerBTest.cs和ControllerCTest.cs.因为我的命名空间与我的文件夹结构一致,所以它们共享命名空间MyProject.Tests.Controllers.

根据我在NUnit SetUpFixture文档中读到的内容,此命名空间内的[SetUpFixture]将为整个命名空间运行一次.也就是说,如果我一次运行所有控制器测试 - SetUpFixture将只执行一次.

问题
正如我所说,每个控制器测试共享一个名称空间.SetUpFixtures适用于整个命名空间.如果我希望每个控制器都有自己 SetUpFixture怎么办?当SetUpFixtures应用于整个名称空间时,这是一个问题.我想要的是一次执行,而不是每次测试.我在SetUpFixture的SetUp中做的一件事就是实例化一个控制器.当然,我可以在SetUpFixture中实例化所有3个控制器,但是当我可能只测试ControllerC时,这看起来很难看.这真的不干净.因此,我想其施加SetUpFixture 只有它出现在类,如ControllerCTests.

根据我的阅读,NUnit似乎不可能实现这一特定功能.如果NUnit无法实现,那么我认为这不是常见的情况.如果这不是常见的情况,我做错了.我的问题是,什么?也许我的测试结构已关闭,需要更改.或者,也许这可能的NUnit的?

代码
我想要的结构的一个例子:

namespace MyProject.Tests.Controllers
{
public class ControllerATests
{
    private static IMyProjectRepository _fakeRepository;
    private static ControllerA _controllerA;

    [SetUpFixture]
    public class before_tests_run
    {
        [SetUp]
        public void ControllerASetup()
        {
            _fakeRepository = FakeRepository.Create();

            _controllerA = new ControllerA(_fakeRepository);
        }
    }

    [TestFixture]
    public class when_ControllerA_index_get_action_executes
    {
        [Test]
        public void it_does_something()
        {
            //
        }

        [Test]
        public void it_does_something_else()
        {
            //
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# nunit unit-testing asp.net-mvc-5

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

为什么FakeItEasy会抛出此异常,为什么要使方法虚拟修复呢?

我有一个测试(代码如下)来测试Method1调用Method2.我得到的例外是

当前代理生成器无法拦截指定的方法,原因如下: - 无法拦截密封方法.

被测方法本身并未密封.但是,它确实依赖于密封类(第三方类,我在创建包装器时遇到了麻烦,以便正确地模拟它 - 另一个问题的另一个主题).无论哪种方式,在这一点上,我并不是要求FakeItEasy嘲笑密封的班级.在调试我的测试时,当调用依赖项时,我可以清楚地看到正在生成一个真实的对象,而不是假的.

然而,鉴于错误信息,我觉得它可能会以某种方式相关.

此外,我通过随机博客文章发现,使方法虚拟修复问题,允许测试通过.我试了一下它就有效了.但我不明白为什么它修复它,而且无论如何,保持方法虚拟对我没有意义.就我而言,被测试的班级没有自己的孩子,即; 没有孩子覆盖它的方法,所以我看不出有任何理由让它成为虚拟的.

我错误地认为我没有理由让这个方法成为虚拟的吗?
是FakeItEasy以某种方式试图嘲笑密封的班级?

我真的不确定如何进行这项测试.

我的测试

[SetUp]
public void SetUp()
{
    // Arrange
    _service2 = A.Fake<Service2>(x => x.WithArgumentsForConstructor(
                                        () => new Service2()));
    _service1 = A.Fake<Service1>(x => x.WithArgumentsForConstructor(
                                        () => new Service1(_service2)));
}

[Test]
public void when_Method1_executes_it_calls_Method2()
{
    // Act
    result = _service1.Method1();

    // Assert
     A.CallTo(() => _service2.Method2())
                                   .WithAnyArguments()
                                   .MustHaveHappened();
}
Run Code Online (Sandbox Code Playgroud)


相关方法

public class Service1 : IService1
{
    private readonly IService2 _service2;
    public Service1(IService2 service2) …
Run Code Online (Sandbox Code Playgroud)

c# testing asp.net-mvc fakeiteasy

11
推荐指数
2
解决办法
7619
查看次数

Glimpse HUD和SQL选项卡中数据库查询计数之间的差异

这个问题涉及Glimpse.MVC3和Glimpse.EF5包.我正在尝试在旧的MVC3站点上调试性能问题.根据Glimpse的HUD,一个特定的GET请求共有12个查询,总共28ms - 但是当我展开以打开主面板,然后单击SQL选项卡时,它说只有6个查询,总共10.41ms.顶部的计数都是6,当我计算它列出的查询时,有6个.当我看到编写的代码时,这也是有意义的.(无论哪种方式,我都可以看到太多是懒惰加载,它需要修复.)

没有来自Glimpse的指标,相同的6个查询正在被执行两次(当我看到HUD显示的面板数量是面板的两倍时,这就是我的大脑所在的位置).

此外,HUD显示0个 Ajax请求,但历史部分实际显示1(这绝对是准确的).

有什么想法会出现差异吗?(请记住,我更关心与查询的差异.)



编辑 - 请求的文件中的JSON:

glimpse_sql:
{
  data:
  {
    "SQL Statistics":
    [
      {
        connectionCount: 6
        queryCount: 6
        transactionCount: 0
        queryExecutionTime: 6.91
        connectionOpenTime: 116.08
      }
    ]
    Queries:
    [
      [
        Commands per Connection
        Duration
      ]

hud:
  {
    sql:
    {
      data:
      {
        queryCount: 12
        connectionCount: 12
        transactionCount: 0
        queryExecutionTime: 41.87
        connectionOpenTime: 242.96
      }
      name: sql
    }
Run Code Online (Sandbox Code Playgroud)

编辑2 - 查询

"Queries":[["Commands per Connection","Duration"],

[[["Transaction Start","Ordinal","Command","Parameters","Records","Duration","Offset","Async","Transaction …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc-3 glimpse

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