C код программы тестирования

Написать программу на языке программирования Си, которая тестирует пользователя по заданной в варианте теме. Тест должен содержать как минимум 20 вопросов, подсчитывать количество верно выбранных ответов и выставлять оценку согласно установленным критериям: — оценка 5 («отлично») соответствует 95% правильных ответов (для 20 вопросов это 19 правильных ответов); — оценка 4 («хорошо») соответствует 75% правильных ответов (для 20 вопросов это 15 правильных ответов); — оценка 3 («удовлетворительно») соответствует 55% правильных ответов (для 20 вопросов это 11 правильных ответов).

По окончании теста должно выводиться сообщение с оценкой и количеством правильно выбранных ответов. В тесте должны быть представлены вопросы трех типов: — с одним правильным ответом; — с несколькими правильными ответами; — со свободным ответом. Обязательна реализация тестирующей программы с использованием подпрограмм для выполнения отдельных действий.

Предусмотреть защиту от ввода ошибочных данных. Тест на тему «Серебряный век русской литературы» Тестирующая программа содержит базу вопросов по заданной теме (≥40 вопросов), из которой при запуске программы случайным образом выбираются N вопросов (число N задает пользователь); вопросы теста, варианты ответов и правильные ответы организованы в виде файла/файлов; результаты тестирования сохраняются в отдельном файле; имеется возможность пропустить текущий вопрос с последующим возвратом к нему; обязательно наличие редактора теста для добавления/удаления/изменения вопросов теста.

3 Простейший способ создания юнит тестов на C++

В блокноте есть вопросы и ответы. Нужно только написать программу.P.S. Всё выше описанное это чтобы были в курсе о чём писать. Буду благодарен за помощь.

Код к задаче: «Создать программу тестирования на 20 вопросов»

Листинг программы

#include «stdafx.h» #include «stdlib.h» #include «locale.h» #include «string.h» void main() < int i=0,prav=0,neprav=0; FILE *R,*V,*O,*S; char a[50],b[1000],c[1000],d[100],e[1000]; setlocale(LC_ALL,»rus»); printf(«n Тест на тему «Серебряный век русской литературы»»); R = fopen(«F:\Test\Lion\Result.txt»,»wt»); fprintf(R,»%s»,a); fclose(R); system(«cls»); V=fopen(«F:\Test\Lion\Voprosy.txt»,»r»); O=fopen(«F:\Test\Lion\Otvety.txt»,»r»); S=fopen(«F:\Test\Lion\Pr.txt»,»r»); while((!feof(V))(!feof(O))) < fgets(b,1000,V); fgets(c,1000,O); printf(«%sn%s»,b,c); printf(«n Ответ: «); scanf(«%s», fscanf(S,»%s», if (strcmp(d,e)==0)< prav++;>else > printf(«Верные ответы %dn»,prav); printf(«Неверные ответы %dn»,neprav); fclose(O); fclose(V); system(«color F0»); system(«pause»); >

Источник: studassistent.ru

ТЕСТИРОВАНИЕ vs РАЗРАБОТКА (куча базированных примеров)

Модульное тестирование

В этой статье мы намерены пользоваться встроенной поддержкой модульного тестирования, предлагаемой Visual Studio, хотя доступны и другие пакеты модульного тестирования .NET. Наиболее популярным из них является, пожалуй, NUnit, однако все пакеты тестирования в основном делают одно и то же. Причина выбора инструментов тестирования Visual Studio связана с привлекательностью интеграции с остальными частями IDE-среды.

Для работы со встроенными средствами модульного тестирования Visual Studio в пример проекта (который мы начали разрабатывать в предыдущей статье) была добавлена новая реализация интерфейса IDiscountHelper. Создайте в папке Models новый файл по имени MinimumDiscountHelper.cs с содержимым, приведенным в примере ниже:

using System; namespace EssentialTools.Models < public class MinimumDiscountHelper : IDiscountHelper < public decimal ApplyDiscount(decimal totalParam) < throw new Exception(); >> >

Наша цель в этом примере — заставить класс MinimumDiscountHelper продемонстрировать следующие аспекты поведения:

  • если общая сумма больше $100, скидка будет составлять 10%;
  • если общая сумма находится в промежутке между $10 и $100 включительно, скидка будет составлять $5;
  • для общей суммы, не превышающей $10, скидка не предоставляется;
  • для отрицательной общей суммы будет сгенерировано исключение ArgumentOutOfRangeException.

Класс MinimumDiscountHelper пока еще не реализует ни одного из перечисленных аспектов поведения. Мы будем следовать , сначала написав модульные тесты и только затем реализовав код.

Создание проекта модульного тестирования

Первый шаг заключается в создании проекта модульного тестирования, для чего в окне Solution Explorer щелкните правой кнопкой мыши на элементе верхнего уровня (Решение (Solution)) и выберите в контекстном меню пункт Add —> New Project (Добавить —> Новый проект).

Читайте также:
Как установить на Андроид программу market

На необходимость создания проекта тестирования можно также указать при создании нового проекта MVC: в диалоговом окне, где выбирается начальное содержимое для проекта MVC. Для этого предусмотрен флажок Add Unit Tests (Добавить модульные тесты).

Откроется диалоговое окно Add New Project (Добавление нового проекта). В разделе шаблонов Visual C# в левой панели выберите элемент Test (Тестирование) и удостоверьтесь, что в средней панели выбран вариант Unit Test Project (Проект модульного тестирования), как показано на рисунке:

Создание проекта модульного тестирования

Укажите EssentialTools.Tests в качестве имени проекта и щелкните на кнопке OK, чтобы создать новый проект, который будет добавлен в текущее решение Visual Studio наряду с проектом приложения MVC.

Проекту тестирования необходимо предоставить ссылку на проект приложения, чтобы получить доступ к классам для выполнения применительно к ним тестов. В окне Solution Explorer щелкните правой кнопкой мыши на элементе References для проекта EssentialTools.Tests и выберите в контекстном меню пункт Add Reference (Добавить ссылку). Щелкните на элементе Solution (Решение) в левой панели и отметьте флажок рядом с EssentialTools:

Создание модульных тестов

Модульные тесты будут добавляться в файл UnitTest1.cs внутри проекта EssentialTools.Tests. Платные редакции Visual Studio обладают удобными средствами автоматической генерации тестовых методов для класса, которые в редакции Express не доступны, однако создавать полезные и значащие тесты можно и вручную.

Для начала внесите изменения, показанные в примере ниже:

using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using EssentialTools.Models; namespace EssentialTools.Tests < [TestClass] public class UnitTest1 < private IDiscountHelper getTestObject() < return new MinimumDiscountHelper(); >[TestMethod] public void Discount_Above_100() < // arrange (организация) IDiscountHelper target = getTestObject(); decimal total = 200; // act (акт) var discountedTotal = target.ApplyDiscount(total); // assert (утверждение) Assert.AreEqual(total * 0.9M, discountedTotal); >> >

Здесь был добавлен одиночный модульный тест.

Класс, который содержит тесты, аннотирован атрибутом TestClass, а отдельные тесты представляют собой методы, аннотированные атрибутом TestMethod. Не все методы в тестовом классе должны быть модульными тестами. Для демонстрации сказанного мы определили метод getTestObject(), который будет использоваться для организации тестов. Поскольку этот метод не имеет атрибута TestMethod, среда Visual Studio не будет трактовать его как модульный тест.

Обратите внимание на добавление оператора using для импорта пространства имен EssentialTools.Models в тестовый класс. Тестовые классы — это всего лишь обычные классы C#, которые совершенно не осведомлены о проекте MVC. Всю «магию» тестирования в проекте обеспечивают атрибуты TestClass и TestMethod.

Как видите, при создании этого метода модульного теста мы следовали шаблону , который был описан в статье «Автоматизированное тестирование».

Существует огромное количество соглашений по именованию модульных тестов, но мы придерживаемся принципа назначения таких имен, которые ясно отражают то, что проверяется тестом. Наш метод модульного теста называется Discount_Above_100() (скидка на сумму выше $100) и выглядит для нас четко и ясно. Тем не менее, в действительности важным является лишь то, чтобы вы (и ваша команда) понимали принятый шаблон именования, поэтому можете выбрать другой подход, если данный чем-то не устраивает.

В начале тестового метода мы вызываем метод getTestObject(), который создает экземпляр объекта, предназначенного для тестирования — в данном случае это MinimumDiscountHelper. Кроме того, мы определяем значение total, для которого будет проводиться тестирование. Это раздел организации модульного теста.

В разделе действия теста мы вызываем метод MinimumDiscountHelper.ApplyDiscount() и присваиваем возвращаемый им результат переменной discountedTotal. Наконец, в разделе утверждения теста мы применяем метод Assert.AreEqual() для проверки того, что значение, полученное из метода ApplyDiscount(), составляет 90% общей суммы, указанной в начале.

Читайте также:
Топ хакерских программ для ПК

В классе Assert определен набор статических методов, которые можно использовать в тестах. Этот класс находится в пространстве имен Microsoft.VisualStudio.TestTools.UnitTesting вместе с рядом дополнительных классов, полезных для настройки и выполнения тестов.

Класс Assert является одним из самых часто применяемых, поэтому его важные методы кратко описаны в таблице ниже:

Утверждает, что два объекта типа T имеют одно и то же значение

Утверждает, что два объекта типа T не имеют одно и то же значение

Утверждает, что две переменные ссылаются на один и тот же объект

Утверждает, что две переменные ссылаются на разные объекты

Отрицательный результат утверждения — никакие условия не проверены

Показывает, что результат модульного теста не может быть однозначно установлен

Утверждает, что булевское значение равно true — чаще всего используется для оценки выражения, возвращающего булевский результат

Утверждает, что булевское значение равно false

Утверждает, что переменная не присвоена объектной ссылке

Утверждает, что переменная присвоена объектной ссылке

Утверждает, что объект относится к указанному типу или является производным от указанного типа

Утверждает, что объект не относится к указанному типу

Каждый статический метод в классе Assert позволяет проверить какой-то аспект модульного теста, и если проверка не проходит, эти методы генерируют исключение. Чтобы модульный тест прошел, все утверждения должны завершиться успешно.

Каждый метод из таблицы имеет перегруженную версию, которая принимает параметр string. В случае отрицательного результата утверждения эта строка помещается в элемент сообщения внутри объекта исключения. Методы AreEqual и AreNotEqual имеют несколько перегруженных версий, предназначенных для сравнения специфических типов. Например, существует версия, которая позволяет сравнивать строки без учета регистра символов.

Одним заслуживающим внимания членом пространства имен Microsoft.VisualStudio.TestTools.UnitTesting является атрибут ExpectedException. Это утверждение, которое дает положительный результат, только если модульный тест генерирует исключение с типом, указанным в параметре ExceptionType. Данный атрибут служит надежным способом обеспечения генерации исключений без необходимости в наличии блоков try. catch внутри кода модульного теста.

Теперь, когда было показано, как создать один модульный тест, к тестовому проекту можно добавить дальнейшие тесты, предназначенные для проверки других аспектов поведения класса MinimumDiscountHelper. Все добавления показаны в примере ниже, но эти модульные тесты настолько кратки и просты (в целом это является характерной особенностью модульных тестов), что подробные объяснения для них приводиться не будут:

using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using EssentialTools.Models; namespace EssentialTools.Tests < [TestClass] public class UnitTest1 < private IDiscountHelper getTestObject() < return new MinimumDiscountHelper(); >[TestMethod] public void Discount_Above_100() < // arrange (организация) IDiscountHelper target = getTestObject(); decimal total = 200; // act (акт) var discountedTotal = target.ApplyDiscount(total); // assert (утверждение) Assert.AreEqual(total * 0.9M, discountedTotal); >[TestMethod] public void Discount_Between_10_And_100() < // arrange (организация) IDiscountHelper target = getTestObject(); // act (акт) decimal TenDollarDiscount = target.ApplyDiscount(10); decimal HundredDollarDiscount = target.ApplyDiscount(100); decimal FiftyDollarDiscount = target.ApplyDiscount(50); // assert (утверждение) Assert.AreEqual(5, TenDollarDiscount, «$10 разница»); Assert.AreEqual(95, HundredDollarDiscount, «$100 разница»); Assert.AreEqual(45, FiftyDollarDiscount, «$50 разница»); >[TestMethod] public void Discount_Less_Than_10() < // arrange (организация) IDiscountHelper target = getTestObject(); // act (акт) decimal discount5 = target.ApplyDiscount(5); decimal discount0 = target.ApplyDiscount(0); // assert (утверждение) Assert.AreEqual(5, discount5); Assert.AreEqual(0, discount0); >[TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void Discount_Negative_Total() < // arrange (организация) IDiscountHelper target = getTestObject(); // act (акт) target.ApplyDiscount(-1); >> >

Прохождение (и не прохождение) модульных тестов

Среда Visual Studio предоставляет окно Test Explorer (Проводник тестов), предназначенное для управления и выполнения тестов. Выберите пункт Windows —> Test Explorer в меню Test среды Visual Studio, чтобы открыть это окно, и щелкните на кнопке Run All (Запустить все) в верхнем левом углу. Вы увидите результаты, похожие на показанные на рисунке ниже:

Выполнение тестов в проекте

В левой панели окна Test Explorer отображается список всех ранее определенных тестов. Разумеется, все эти тесты не прошли, поскольку тестируемый метод пока еще не реализован. Щелкнув на любом тесте в этом окне, в правой панели можно просмотреть подробную информацию о нем. Окно Test Explorer предоставляет набор разных способов для выделения и фильтрации модульных тестов и для выбора запускаемых тестов. Тем не менее, в нашем простом примере проекта мы просто запустим все тесты, щелкнув на кнопке Run All.

Читайте также:
Отредактировать векторное изображение во время верстки можно с помощью программы

Реализация функциональной возможности

Теперь, когда известно, что по завершении написания кода можно будет проверить его работу, мы можем приступить к реализации необходимой функциональной возможности. При всей выполненной подготовке реализация класса MinimumDiscountHelper оказывается достаточно простой и показана в примере ниже:

using System; namespace EssentialTools.Models < public class MinimumDiscountHelper : IDiscountHelper < public decimal ApplyDiscount(decimal totalParam) < if (totalParam < 0) < throw new ArgumentOutOfRangeException(); >else if (totalParam > 100) < return totalParam * 0.9M; >else if (totalParam > 10 totalParam < 100) < return totalParam — 5; >else < return totalParam; >> > >

Тестирование и исправление кода

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

Необходимо сделать тест 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; >>
Отслеживать

46.4k 16 16 золотых знаков 56 56 серебряных знаков 97 97 бронзовых знаков
задан 15 июн 2020 в 12:20
Freshmathick Freshmathick
15 1 1 серебряный знак 5 5 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

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

  1. Определиться с методом хранения БД Вопросов: 1.1. Это может быть как какая-либо СУБД (e.g. MySQL , PostgreSQL , MS SQL 1.2. Это может быть обычная локальная БД (e.g. SQLite к примеру); 1.3. Это могут быть файлы с вопросами (e.g. JSON , txt
  2. Если вы решили использовать JSON (способ 1.3.), то в c# масса примеров сериализации и десериализации объектов на лету.
  3. При разработке интерфейса способами 3.* не возникнет сложностей, т.к. все библиотеки входят в стандартную поставку Visual Studio 2019 Community edition
  4. При разработке способом 3.2. рекомендую сначала освоить AspNetCore . Идеальным решением при выборе из вариантов будет 3.2. + 1.1 — и опыту наберетесь, и тестирование будет проводиться с любого устройства (с условием использования адаптивного дизайна сайта), подключенного к сети.
  5. Из личного опыта:

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

        Источник: ru.stackoverflow.com

      Рейтинг
      ( Пока оценок нет )
      Загрузка ...
      EFT-Soft.ru