Первый тест для каждого класса выполняется гораздо медленнее, чем любой другой тест - PullRequest
1 голос
/ 18 февраля 2020

Я использую VS 2019 с проектом модульного тестирования. Всего у меня около 80 тестов, разбитых на несколько тестовых классов. Я заметил, что когда в классе есть несколько методов, первый тест занимает около 30 мс, а остальные - около 1 мс. Это очень дешевые тесты, не попавшие в базу данных. И это очень непротиворечиво - из моих 10 или около того тестовых классов все они демонстрируют один метод тестирования, требующий значительно большего времени, чем другие.

Я воспроизвел это с чрезвычайно базовым c тестом:

Imports Xunit

Public Class TestTestsCopy

    Property x As Integer

    Public Sub New()
        x += 1
    End Sub

    <Fact()>
    Public Sub TestOne()       
        x += 1

        Assert.Equal(2, x)
    End Sub

    <Fact()>
    Public Sub TestTwo()       
        x += 2

        Assert.Equal(3, x)
    End Sub

    <Fact()>
    Public Sub TestThree()   
        x += 3

        Assert.Equal(4, x)
    End Sub

    <Fact()>
    Public Sub TestFour()     
        x += 4

        Assert.Equal(5, x)
    End Sub
End Class

Я также скопировал / вставил этот тест и переименовал класс - оба тестовых класса показывают, что первый метод занимает 33-36 мс, а каждый второй тест равен 1 мс.

Я знаю, что эти временные интервалы не долго не сумасшедший, но это выглядит действительно странно.

Чтобы исключить что-либо в моих проектах, я создал совершенно новый проект 'консольного приложения', содержащий только ссылки на xunit / xunit VS runner, и скопировал тот же тест классы, как указано выше - точно такое же поведение.

VS 'test explorer' showing test timings

...