Как сделать тест на С#?

Необходимо сделать тест Visual Studio на C# WinForm или WPF. Используя базу данных. Как использовать таблицы в базе данных для тестов. Как сделать бэкендом или напрямую?

Код:

public void show(int n)
{
    int next = n+1;
    label1.Text = "Тест " +next;

    switch (answers[n])
    {
        case 0:
            buttonright.Checked = true;
            falseone.Checked = false;
            falseagain.Checked = false;
            break;
        case 1:
            buttonright.Checked = false;
            falseone.Checked = true;
            falseagain.Checked = false;
            break;
        case 2:
            buttonright.Checked = false;
            falseone.Checked = false;
            falseagain.Checked = true;
            break;
    }
    switch (n)
    {
        case 0:
            questone.Text = "первый вопрос";

            break;
        case 1:
            questone.Text = "второй вопрос";
            break;
        case 2:
            questone.Text = "третий вопрос";
            break;
    }
}

Ответы (3 шт):

Автор решения: Sergination

Для начала, если вы работаете с базой нужно установить коннектор и закинуть его в папку с проектом. После задать строку подключения. https://habr.com/ru/post/169929/ - прочтите тут, всё предельно ясно. Работа с таблицами из бд происходит через процедуры передачи запросов и записывает в переменную результат. mysql_result.GetString(0) - имеет строковый тип и его можно присваивать к обьектам (если речь про WPF или Windows Forms). Надеюсь был полезен.

→ Ссылка
Автор решения: Рустам Алиев

Как уже Вам ответили выше, необходимо соблюсти некоторые условия:

  1. Определиться с методом хранения БД Вопросов:

    1.1. Это может быть как какая-либо СУБД (e.g. MySQL, PostgreSQL, MS SQL & etc.);

    1.2. Это может быть обычная локальная БД (e.g.SQLite к примеру);

    1.3. Это могут быть файлы с вопросами (e.g.JSON, txt & etc.).

  2. Определиться со способом получения данных из БД Вопросов:

    2.1. Если тестируемый будет подключен к сети, значит, для упрощения способа актуализации вопросов Вам подойдет хранение БД Вопросов методами 1.1 или 1.3, но тогда надо организовать сетевое размещение (e.g. организовать доступ к СУБД либо выдачу JSON-файла).

    2.2. Если тестируемый не будет подключен к сети, значит вам необходимо выбрать один из вариантов 1.2. или 1.3., но тогда Вам будет необходимо либо вложить в БД Вопросы полный (исчерпывающий) перечень вопросов, либо автоматизировать актуализацию вопросов при подключении к сети.

  3. Необходимо определиться с технологией отображения, с помощью которой будет проводиться тестирование:

    3.1. WinForm - лучшее решение для организации тестирования без подключения к сети (нет необходимости подтягивать дополнительное ПО для нормального функционирования)

    3.2. Web - лучшее решение для организации тестирования в сети (нет необходимости в принципе ничего скачивать или устанавливать - нужен только браузер и не зависит от используемой операционной системы).

    3.3. WPF - прогрессивно (сомнительное выражение), но необходимо предусмотреть возможность подтягивания дополнительного ПО, для нормального функционирования тестирования. 3.4. UWP - так же, как и предыдущее.


  • Для использования способов 1.1. или 1.2. рекомендую смотреть в сторону EntityFramework Core с использованием Dependency Injection;
  • Если вы решили использовать JSON (способ 1.3.), то в c# масса примеров сериализации и десериализации объектов на лету.
  • При разработке интерфейса способами 3.* не возникнет сложностей, т.к. все библиотеки входят в стандартную поставку Visual Studio 2019 Community edition
  • При разработке способом 3.2. рекомендую сначала освоить AspNetCore. Идеальным решением при выборе из вариантов будет 3.2. + 1.1 - и опыту наберетесь, и тестирование будет проводиться с любого устройства (с условием использования адаптивного дизайна сайта), подключенного к сети.

Из личного опыта:

  • (Не очевидное)

    1. Необходимо задать максимальную длину вопроса(string.Length) и при разработке интерфейса отталкиваться от этой длинны, чтобы длинные вопросы не вылазили за границы форм.
    2. Правильные ответы на вопросы помечать свойством типа bool.
    3. При использовании для тестирования технологии Web свойство с правильным ответом ни в коем случае не передавать во View, т.к. можно будет его отследить. Валидацию ответа проводить на стороне контроллера по Submit.
  • (Очевидное)

    1. Необходимо предусмотреть поля Категория вопроса и Стоимость вопроса для последующего возможного масштабирования приложения.
    2. При поточном тестировании (все вопросы выводятся один за одним) предусмотреть вывод вопросов в случайном порядке, чтобы повысить качество тестирования.
    3. По тем же причинам необходимо предусмотреть вывод ответов на вопросы в случайном порядке.
  • (Самый простой способ) мною не рекомендуется.

    Использовать готовое решение - есть прекрасный экземпляр Moodle. В гугле ищется по первым ссылкам.

→ Ссылка
Автор решения: Freshmathick

Исправил тест изменяя значения checkbox, и самих вопросов код примера вопросов и ответов

//Вопрос
switch (n)
{
    case 0:
        questone.Text = "Персональный компьютер состоит из:";

        break;
    case 1:
        questone.Text = "Разрядность микропроцессора — это:";
        break;
    case 2:
        questone.Text = "Постоянная память предназначена для";
        break;
}
//Первые ответы
switch (n)
{
    case 0:
        checkboxone.Text = "системного блока";
        break;
    case 1:
        checkboxtwo.Text = "телефона";
        break;
    case 2:
        checkboxtrihd.Text = "плеера";
        break;
}
//Второй ответ
if (n==1)
{
    checkboxone.Text = "наибольшая единица информации";
    checkboxtwo.Text = "количество битов, которое воспринимается микропроцессором как единое целое";
    checkboxtrihd.Text = "наименьшая единица информации";
}
→ Ссылка