论坛首页 Java企业应用论坛

[对谈录]是否可以把logger的输出视为一个方法的output, 并针对它进行单元测试?

浏览 6826 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-28  
不是。而是因为程序的执行过程中本来就要输出日志。现在的问题是要不要在单元测试阶段就测日志的内容。

pipilu 写道
楼主莫非是遇到一种情况:觉得单元测试不好写,于是想了个办法改为测日志输出?
真搞不懂了

0 请登录后投票
   发表时间:2009-04-28  
日志输出是文本形式的,是不严格约束的东西,是给人看的,你如何让机器代码去测试?

String log = takeLogFromSomeWhere();
assertTrue(log.equals("add a user....."))
????
0 请登录后投票
   发表时间:2009-04-28   最后修改:2009-04-28
chenjianjx 写道
不是。而是因为程序的执行过程中本来就要输出日志。现在的问题是要不要在单元测试阶段就测日志的内容。

pipilu 写道
楼主莫非是遇到一种情况:觉得单元测试不好写,于是想了个办法改为测日志输出?
真搞不懂了



噢。这样子啊。
之所以要有单元测试,是为了能尽早的发现问题,随时修正航向。
根据(落后的)瀑布模型,如果程序都开发完了,才进行测试,到时候才发现问题可能很不好改。更严重的,可能发现已经偏离轨道很远了(做的根本就不是想要的)。
从这个角度来说,日志内容方面的错误,等最后功能全开发完了再检查也不迟吧?需要特意花时间写单元测试来得到快速的反馈么?(而且这种单元测试对指导设计方面也没有什么帮助)
0 请登录后投票
   发表时间:2009-04-28  
一个小的批量操作模块,使用日志是很自然的事吧? 这个模块足够小,以致于我们可以对它进行单元测试。



针对它写单元测试类主要是为了将测试过程自动化,在反复修改代码或者重构时,这一点很重要,不是吗?

pipilu 写道

chenjianjx 写道不是。而是因为程序的执行过程中本来就要输出日志。现在的问题是要不要在单元测试阶段就测日志的内容。

pipilu 写道楼主莫非是遇到一种情况:觉得单元测试不好写,于是想了个办法改为测日志输出?
真搞不懂了


噢。这样子啊。
之所以要有单元测试,是为了能尽早的发现问题,随时修正航向。
根据(落后的)瀑布模型,如果程序都开发完了,才进行测试,到时候才发现问题可能很不好改。更严重的,可能发现已经偏离轨道很远了(做的根本就不是想要的)。
从这个角度来说,日志内容方面的错误,等最后功能全开发完了再检查也不迟吧?需要特意花时间写单元测试来得到快速的反馈么?(而且这种单元测试对指导设计方面也没有什么帮助)


0 请登录后投票
   发表时间:2009-04-28  
在 MockLogger 里添加一个方法  boolean contains()


hatedance 写道

日志输出是文本形式的,是不严格约束的东西,是给人看的,你如何让机器代码去测试?String log = takeLogFromSomeWhere();assertTrue(log.equals("add a user....."))????

0 请登录后投票
   发表时间:2009-04-28   最后修改:2009-04-28
chenjianjx 写道
在 MockLogger 里添加一个方法  boolean contains()


hatedance 写道

日志输出是文本形式的,是不严格约束的东西,是给人看的,你如何让机器代码去测试?String log = takeLogFromSomeWhere();assertTrue(log.equals("add a user....."))????


常常用正则方式去查找到指定的类名...或字串"error"
0 请登录后投票
   发表时间:2009-04-28  
wl95421 写道
Practical.API.Design.Confessions.of.a.Java.Framework.Architect
是APress出的
网上应该可以找到
不过作者的母语9成9不是英语


这本书我下载了,在亚马逊上看了一下评论,评价是相当的高啊,还被一个读者列为和《Effective Java》一样必读的两本书。非看不可了。
0 请登录后投票
   发表时间:2009-04-29  
wl95421 写道
Practical.API.Design.Confessions.of.a.Java.Framework.Architect
是APress出的
网上应该可以找到
不过作者的母语9成9不是英语



晕。。。直接英文版?现在有中文版不?我也想看看。一直不了解NETBEANS,是不是我落伍了?呵呵。
0 请登录后投票
   发表时间:2009-04-29   最后修改:2009-04-29
昨天看了看书
发现log是可以测试的
而且有接口可以用.......(handler)

代码如下:

import org.junit.Test;

import java.util.logging.*;

class MyLogHandler extends Handler{
    private LogRecord record;

	@Override
	public void flush() {
	}

	@Override
	public void close() throws SecurityException {
	}

	public void publish(LogRecord record) {
		this.record = record;
	}

	public String getMessage() {
		return record.getMessage();
	}

}

 class MyTemp {

	static Logger logger = Logger.getLogger(MyTemp.class.getName());
    public MyTemp(){
    	
    	MyTemp.logger.info("abcdefg");
    	
    }
}
public class MyTest {
	@Test
	public void testLogMessage() {
		Handler h = new MyLogHandler();
		MyTemp.logger.addHandler(h);
		MyTemp.logger.setLevel(Level.FINEST);// 这个设定最重要
		MyTemp t = new MyTemp();

		System.out.println(((MyLogHandler) h).getMessage());
	}
   
}




当然日志他只把最近的日志打出来...
0 请登录后投票
   发表时间:2009-04-29  
中文版本正在翻译中,估计是下半年出版。
不过感觉书对程序员水平有一定要求,估计销量可能会一般。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics