Проблемы С Unit Test

  • Автор темы mariotto
  • Дата начала
M

mariotto

#1
10. Составить описание класса для представления комплексных чисел. Обеспечить выполнение операций сложения, вычитания и умножения комплексных чисел. На-писать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.

Вообщем началось все с того что написал программу на с++, но VS 2010 не захотело создавать тесты, тогда я переписал под шарп, но автоматически созданные тесты не сработали. Объясните пожалуйста принцип Unit Test-ов. И помогите их создать. Вот код самой программы:
C++:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ComplexDigit
{
class MyComplexDigit
{
public double A { get; set; }//a
public double B { get; private set; }//b
public MyComplexDigit() { }//конструктор по умолчанию
public MyComplexDigit(double a, double b)//конструктор с параметрами
{
this.A = a;
this.B = b;
}
public override string ToString()//переопределение ToString
{
if (this.A == 0 && this.B == 0)
{
return String.Format("0");
}
else
{
return String.Format("{0} + {1} i", this.A, this.B);
}
}
public static MyComplexDigit operator +(MyComplexDigit temp, MyComplexDigit temp1)
{
double i, j;
i = temp.A + temp1.A;
j = temp.B + temp1.B;
return new MyComplexDigit(i, j);
}
public static MyComplexDigit operator *(MyComplexDigit temp, MyComplexDigit temp1)
{
double i, j;
i = temp.A * temp1.A - temp.B * temp1.B;
j = temp.A * temp1.B + temp1.A * temp.B;
return new MyComplexDigit(i, j);
}
public static MyComplexDigit operator -(MyComplexDigit temp, MyComplexDigit temp1)
{
double i, j;
i = temp.A - temp1.A;
j = temp.B - temp1.B;
return new MyComplexDigit(i, j);
}
}
}
namespace ComplexDigit
{
class Program
{
static void Main(string[] args)
{
MyComplexDigit z = new MyComplexDigit(8, 2);
MyComplexDigit z2 = new MyComplexDigit(5, 7);
MyComplexDigit z1 = z -z2;
Console.WriteLine("Z1 = {0}",z1);
Console.Read();
}
}
}
Вот что создалась автоматически для тестирования переопределенных методов, я туда не лез
C++:
using ComplexDigit;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;

namespace TestProject1
{


/// <summary>
///Это класс теста для MyComplexDigitTest, в котором должны
///находиться все модульные тесты MyComplexDigitTest
///</summary>
[TestClass()]
public class MyComplexDigitTest
{


private TestContext testContextInstance;

/// <summary>
///Получает или устанавливает контекст теста, в котором предоставляются
///сведения о текущем тестовом запуске и обеспечивается его функциональность.
///</summary>
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}




/// <summary>
///Тест для ToString
///</summary>
[TestMethod()]
public void ToStringTest()
{
MyComplexDigit target = new MyComplexDigit(); // TODO: инициализация подходящего значения
string expected = string.Empty; // TODO: инициализация подходящего значения
string actual;
actual = target.ToString();
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Проверьте правильность этого метода теста.");
}

/// <summary>
///Тест для op_Addition
///</summary>
[TestMethod()]
public void op_AdditionTest()
{
MyComplexDigit temp = null; // TODO: инициализация подходящего значения
MyComplexDigit temp1 = null; // TODO: инициализация подходящего значения
MyComplexDigit expected = null; // TODO: инициализация подходящего значения
MyComplexDigit actual;
actual = (temp + temp1);
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Проверьте правильность этого метода теста.");
}

/// <summary>
///Тест для op_Multiply
///</summary>
[TestMethod()]
public void op_MultiplyTest()
{
MyComplexDigit temp = null; // TODO: инициализация подходящего значения
MyComplexDigit temp1 = null; // TODO: инициализация подходящего значения
MyComplexDigit expected = null; // TODO: инициализация подходящего значения
MyComplexDigit actual;
actual = (temp * temp1);
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Проверьте правильность этого метода теста.");
}

/// <summary>
///Тест для op_Subtraction
///</summary>
[TestMethod()]
public void op_SubtractionTest()
{
MyComplexDigit temp = null; // TODO: инициализация подходящего значения
MyComplexDigit temp1 = null; // TODO: инициализация подходящего значения
MyComplexDigit expected = null; // TODO: инициализация подходящего значения
MyComplexDigit actual;
actual = (temp - temp1);
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Проверьте правильность этого метода теста.");
}
}
}
Насколько я понимаю надо здесь самому задавать тестовые наборы типа:
C++:
MyComplexDigit temp = new MyComplexDigit(8, 2); // TODO: инициализация подходящего значения
MyComplexDigit temp1 = new MyComplexDigit(5, 7); // TODO: инициализация подходящего значения
MyComplexDigit expected =new MyComplexDigit(3, -5); // TODO: инициализация подходящего значения
Для вычитания. Но решил посоветоваться т.к. выдает ошибку:
Код:
Непройденный	op_SubtractionTest	TestProject1	Ошибка в Assert.AreEqual. Ожидается: <3 + -5 i>. Фактически: <3 + -5 i>.
 
M

mariotto

#2
Решил проблему так:
C++:
			MyComplexDigit temp = new MyComplexDigit(8, 2); // TODO: инициализация подходящего значения
MyComplexDigit temp1 = new MyComplexDigit(5, 7); // TODO: инициализация подходящего значения
string expected = new MyComplexDigit(3, -5).ToString (); // TODO: инициализация подходящего значения
string actual;
actual = (temp - temp1).ToString();
Assert.AreEqual(expected, actual);
//Assert.Inconclusive("Проверьте правильность этого метода теста.");
Видимо экземпляр моего класса сравнить невозможно=(
Но и моя реализация по моему неправильная, хоть и работает...


И ещё вопрос: как задать параметры тестовому классу? Такой вариант не сработал:
Код:
 [TestMethod()]
public void op_SubtractionTest(double A,double B)
{

MyComplexDigit temp = new MyComplexDigit(8, 2); // TODO: инициализация подходящего значения
MyComplexDigit temp1 = new MyComplexDigit(5, 7); // TODO: инициализация подходящего значения
string expected = new MyComplexDigit(3, -5).ToString(); // TODO: инициализация подходящего значения
string actual;
actual = (temp - temp1).ToString();
Assert.AreEqual(expected, actual);
//Assert.Inconclusive("Проверьте правильность этого метода теста.");
}
Думаю это из-за пометки [TestMethod()]. Как решить? Так как по заданию, я повторюсь:Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Причем обязательно модульный тест.
 
R

rrrFer

#5
как задать параметры тестовому классу?
мне кажется вы что-то не так делаете.

Добавлено:
Код:
class ComplexDigit { 
//...
friend bool operator==(const ComplexDigit& a, const ComplexDigit& b);
//...
}

bool operator==(const ComplexDigit& left, const ComplexDigit& b) {
return a.A == b.A && a.B == b.B;
}
как-то так на С++

Добавлено: но это только предположения, я понятия не имею как там юнит тесты в шарпе работают, на самом деле.