我正在尝试对通过get / sets保存值的对象类进行单元测试。
我了解您将如何测试数字计算。
但是在没有像x + y这样的测试方法的情况下,如何测试get / set?
这是我需要测试的课程:
public class Train
{
//Variables to hold each Trains details. Using different data types for specific entrys when necessary.
private string _trainID;
private string _departure;
private string _destination;
private string _type;
private string _interStop;
private TimeSpan _departureTime;
private string _departureDay;
private bool _sleeperBerth;
private bool _firstClass;
//Get/Set for setting Train ID value.
public string TrainID
{
get
{
return _trainID;
}
set
{
_trainID = value;
}
}
//Get/Set for setting departure value.
public string Departure
{
get
{
return _departure;
}
set
{
_departure = value;
}
}
//Get/Set for setting destination value.
public string Destination
{
get
{
return _destination;
}
set
{
_destination = value;
}
}
//Get/Set for setting type value.
public string Type
{
get
{
return _type;
}
set
{
_type = value;
}
}
//Get/Set for setting Intermediate Stop value.
public string IntermediateStop
{
get
{
return _interStop;
}
set
{
_interStop = value;
}
}
//Get/Set for setting Departure Time value.
public TimeSpan DepartureTime
{
get
{
return _departureTime;
}
set
{
_departureTime = value;
}
}
//Get/Set for setting Departure Day value.
public string DepartureDay
{
get
{
return _departureDay;
}
set
{
_departureDay = value;
}
}
//Get/Set for setting Sleeper Berth value.
public bool SleeperBerth
{
get
{
return _sleeperBerth;
}
set
{
_sleeperBerth = value;
}
}
//Get/Set for setting First Class value.
public bool FirstClass
{
get
{
return _firstClass;
}
set
{
_firstClass = value;
}
}
}
我也完成了一些我认为是正确的单元测试,但是只是失败了。有人可以让我了解我该怎么做吗?
这是我所做的测试(真的那么简单吗?)
namespace TrainTest
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestTrainID()
{
Train train = new Train();
string id = "1S45";
train.TrainID = "1S45";
Assert.AreEqual(id, train.TrainID);
}
}
}
答案 0 :(得分:0)
您正在浪费时间重新发明轮子。
用auto-implemented properties替换您的属性,突然之间,您不需要 进行getter和setter的单元测试,因为编译器会创建所有getter / setter代码并确保其正确:
public class Train
{
public string TrainID { get; set; }
public string Departure { get; set; }
... etc. ...
}
(由于您提到这是一个“玩具示例”,旨在使您开始进行单元测试:是的,您建议的测试很好。)
答案 1 :(得分:0)
大多数时候,结构化测试流程可以帮助避免在安排和练习测试时犯下的简单错误
malloc
上述失败的可能性现在将问题缩小到被测对象有过错的地方。
答案 2 :(得分:-1)
您应该测试行为以及行为引起的状态更改。您的班级没有行为,行为也不会改变状态。没有要测试的东西。
一个有效的测试是当您的类具有一个构造函数来设置后备字段,然后断言属性公开了后备字段的值时。
如果测试失败,则会指出构造函数中的错误。
因此,假设您的类具有类似的构造函数(仅出于演示目的而进行了简化)
public class Train {
private string _trainID;
public Train(string id) {
_trainID = id;
}
//Get/Set for setting Train ID value.
public string TrainID {
get {
return _trainID;
}
set {
_trainID = value;
}
}
}
请参见下面的测试示例,可以用来确认构造函数的行为符合预期。
public class TrainUnitTest
{
[Fact]
public void Should_Get_TrainID()
{
//arrange
var expected = "1S45";
var subject = new Train("1S45");
//act
string actual = subject.TrainID;
//assert
Assert.Equal(expected, actual);
}
}