С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 29.03.2022
Сообщений: 162

Юнит-тесты XUnit и контекст

29.01.2024, 14:54. Показов 1373. Ответов 6

Студворк — интернет-сервис помощи студентам
Добрый день ещё раз )
Новый своеобразный вопрос, на который не нашёл ответа...
Как в xUnit реализовать метод, который будет выоплняться по окончанию всех тестов?
Деструктор не подходит, так как его GC вызывает не сразу, а нужна мгновенная очистка. Пробовал IDisposable, но,
я пишу unit-тесты => нужно разово вызвать Dispose когда тесты этого класса закончатся, а Dispose(), я, кроме того, как, вызывать в конце каждого метода, лучше не придумал.. Как выкручиваться?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2024, 14:54
Ответы с готовыми решениями:

Создать контекст приложения для юнит теста
Всем привет, пытаюсь сделать юнит тест на нативную библиотеку написанную не мной. Суть в том что при запуске приложения, загрузки...

Юнит тесты
Имеется программа с графическим редактором. Программа позволяет создавать вершины, соединять их дорогами и считать кратчайший путь....

Не работают юнит тесты в Visual Studio
Я новичок, просьба не злиться если я написал что-то не так или у меня тупые формулировки:) В общем дело обстоит так, я прохожу...

6
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18250 / 14174 / 5366
Регистрация: 17.03.2014
Сообщений: 28,850
Записей в блоге: 1
29.01.2024, 15:23
Цитата Сообщение от MaXiMKnjsh Посмотреть сообщение
я пишу unit-тесты => нужно разово вызвать Dispose когда тесты этого класса закончатся, а Dispose(), я, кроме того, как, вызывать в конце каждого метода, лучше не придумал.. Как выкручиваться?
Xunit и так вызывает Dispose() после каждого метода. Ведь он каждый раз создает новый экземпляр класса, выполняет один метод и вызывает Dispose() для очистки.

Цитата Сообщение от MaXiMKnjsh Посмотреть сообщение
Как в xUnit реализовать метод, который будет выоплняться по окончанию всех тестов?
Если вам точно нужен метод который выполнится один раз после всех тестов, то смотрите Class Fixtures. Если нужно чтобы метод вызывался после каждого теста, то достачно иметь Dispose().
0
1 / 1 / 0
Регистрация: 29.03.2022
Сообщений: 162
30.01.2024, 15:48  [ТС]
Поставил точку останова на метод Dipose, ии, оон ни разу не вызвался.
Возможно я где-то допускаю ошибку..
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    public abstract class TestCommandBase : IDisposable
    {
        public readonly DataContext Context;
        public TestCommandBase()
        {
            Context = ContextFactory.Create();
        }
 
        public void Dispose()
        {
            ContextFactory.Destroy(Context);
        }
    }
 
public class FridgeProductsControllerTests : TestCommandBase
{
    [Fact]
    public void GetProductsList_GetTableDataAndAssert()
    {
        //Arrange
        var fridgeProductsGuid = ContextFactory.fridgeProductsGuid;
        var productGuid = ContextFactory.productGuid;
        var fridgeGuid = ContextFactory.fridgeGuid;
        var quantity = 5;
 
        Context.FridgeProducts.Add(new FridgeProducts()
        {
            Id = fridgeProductsGuid,
            ProductId = productGuid,
            Quantity = quantity,
            FridgeId = fridgeGuid
        });
        Context.SaveChanges();
 
        var fpController = new FridgeProductsController(new FridgeProductsRepository(Context));
        ICollection<FridgeProducts> fridgeProductsTable = Context.FridgeProducts.ToList();
 
        //Act
        IActionResult actionResult = fpController.GetProductsList(fridgeGuid);
        var OkResult = actionResult as OkObjectResult;
 
        //Assert
        Assert.NotNull(OkResult);
    }
Или, может, вы ошибаетесь?)
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
30.01.2024, 16:17
Лучший ответ Сообщение было отмечено MaXiMKnjsh как решение

Решение

MaXiMKnjsh, проверьте на простейшем примере:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class TruthTests : IDisposable
{
    private readonly ITestOutputHelper _output;
 
    public TruthTests(ITestOutputHelper output)
    {
        _output = output;
        _output.WriteLine($"{nameof(TruthTests)} is initializing");
    }
    
    [Fact]
    public void TrueEqualsTrue()
    {
        Assert.Equal(true, true);
        
    }
    
    [Fact]
    public void TrueDoesNotEqualFalse()
    {
        Assert.NotEqual(true, false);
    }
    
    public void Dispose()
    {
        _output.WriteLine($"{nameof(TruthTests)} are being cleanup");
    }
}
Добавлено через 4 минуты
На каждый тест будет вывод по две строки - на создание и на Dispose.
Если нужно один раз перед тестами и один раз после тестов, то смотрите такое:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using Xunit;
 
public class TestsFixture : IDisposable
{
    public TestsFixture ()
    {
        // Do "global" initialization here; Only called once.
    }
 
    public void Dispose()
    {
        // Do "global" teardown here; Only called once.
    }
}
 
public class DummyTests : IClassFixture<TestsFixture>
{
    public DummyTests(TestsFixture data)
    {
    }
}
This will result in the constructor of TestsFixture only being run once for every class under test. It thus depends on what you want exactly to choose between the two methods.
Добавлено через 2 минуты
TestsFixture тут - это ресурс который на каждую сессию тестов будет однократно инициализирован, и один раз уничтожен по окончанию. Его и используйте в ваших тестах.
0
1 / 1 / 0
Регистрация: 29.03.2022
Сообщений: 162
30.01.2024, 16:20  [ТС]
И вправду, на данном примере работает, значит всё-таки я где-то что-то делаю неверно.
Но только в чём же? Ведь у меня имеется абстрактный класс, который реализовывает IDisposable,а потом его наследуют мои классы для тестов. А в dispose компилятор не попадает

Увидел добавочный ответ, буду пробовать, спасибо!
Только вопрос остаётся, почему в моём случае Dispose не вызыывается?
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
30.01.2024, 16:25
Цитата Сообщение от MaXiMKnjsh Посмотреть сообщение
Только вопрос остаётся, почему в моём случае Dispose не вызыывается?
Не знаю, поиграйтесь с кодом, перенесите Dispose. И тд. и тп.
0
HF
 Аватар для HF
1309 / 887 / 200
Регистрация: 09.09.2011
Сообщений: 2,604
Записей в блоге: 2
30.01.2024, 16:50
Цитата Сообщение от MaXiMKnjsh Посмотреть сообщение
Как в xUnit реализовать метод, который будет выоплняться по окончанию всех тестов?
Деструктор не подходит, так как его GC вызывает не сразу, а нужна мгновенная очистка. Пробовал IDisposable, но,
я пишу unit-тесты => нужно разово вызвать Dispose когда тесты этого класса закончатся, а Dispose(), я, кроме того, как, вызывать в конце каждого метода, лучше не придумал..
Подозреваю что причина этой темы в Этой теме:
https://www.cyberforum.ru/ado-... 52541.html

И интересует другое - Зачем это нужно? Вы уверены что нужно делать Dispose в Тестах? Это никак не связано с настоящим приложением. Смысл использования этого в тестах - отсутствует. Если что-то пошло не так - нужно описать проблему. Это может быть как с неверным применением тестирования, так и с необходимостью рефакторинга основного кода.

Пока причина не определена - помогать автору вызывать Dispose, сродни учить заряжать пистолет, не думая что он не будет из него стрелять в людей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2024, 16:50
Помогаю со студенческими работами здесь

Как пишутся юнит тесты для методов, где фигурируют entity с множеством связей?
у меня есть метод , который принимает условный entity PaymentTransaction , а в нем есть связывающие entities , а у тех еще свои и так...

Юнит тесты для сайта
Добрый день. Начинаю кое-как изучать модульное тестирование. Нужно проверить работоспособность некоторой страницы сайта, но совсем не могу...

Юнит тесты не видят классы
Уже который раз пытаюсь... Создаю проект 'Консольное приложение' Program.cs Потом в него добавляю 'Тестовый проект NUnit' UnitTests.cs ...

Виртуальные методы и юнит-тесты
В C# пришел недавно из Java, где все методы виртуальные. И сразу столкнулся с тем, что в C# по умолчанию методы невиртуальные, более того,...

Написать юнит тесты MSTest
Написать юнит тесты к классам Programmer, Builder using System; using System.Collections.Generic; using System.Linq; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru