Java(以及其他社区,我确定)是否应该测试琐碎的getter/setter方法,这是一个众所周知的争论.通常,这与代码覆盖有关.让我们同意这是一场公开辩论,而不是试图在这里回答.
有几篇关于使用Java反射来自动测试这些方法的博客文章.
是否有任何框架(例如jUnit)提供这样的功能?例如,一个注释说"这个测试T应该自动测试C类的所有getter/setter,因为我声称它们是标准的".
在我看来,它会增加价值,如果它是可配置的,那么"辩论"将留给用户作为选项.
我经常可以识别出很多很好的封装区域和容易进行单元测试的区域,但我也发现很多代码在单元测试中看起来并不是很好 - 通常是数据访问和用户界面.无论我尝试使用哪种单元测试"技术",我都倾向于发现在这些地方创建功能单元测试不仅需要付出很多努力,而且这些测试往往非常脆弱,并且没有真正测试过.
您在什么时候停下来并决定单元测试的好处不值得花费?
我正在尝试定义一种方法来模拟访问数据库而不访问的情况......这可能听起来很疯狂,但事实并非如此.
这是一个关于我想测试的方法的示例:
public IDevice GetDeviceFromRepository(string name)
{
IDevice device = null;
IDbConnection connection = new SqlConnection(ConnectionString);
connection.Open();
try
{
IDbCommand command = connection.CreateCommand();
command.CommandText = string.Format("SELECT DEVICE_ID,DEVICE_NAME FROM DEVICE WHERE DEVICE_NAME='{0}'", name);
IDataReader dataReader = command.ExecuteReader();
if(dataReader.NextResult())
{
device = new Device(dataReader.GetInt32(0),dataReader.GetString(1));
}
}
finally
{
connection.Close();
}
return device;
}
Run Code Online (Sandbox Code Playgroud)
我假装模仿IDataReader,所以我可以控制正在阅读的内容.类似的东西(使用Moq框架):
[TestMethod()]
public void GetDeviceFromRepositoryTest()
{
Mock<IDataReader> dataReaderMock = new Mock<IDataReader>();
dataReaderMock.Setup(x => x.NextResult()).Returns(true);
dataReaderMock.Setup(x => x.GetInt32(0)).Returns(000);
dataReaderMock.Setup(x => x.GetString(1)).Returns("myName");
Mock<IDbCommand> commandMock = new Mock<IDbCommand>();
commandMock.Setup(x => x.ExecuteReader()).Returns(dataReaderMock.Object);
Mock<RemoveDeviceManager> …
Run Code Online (Sandbox Code Playgroud)