我正在尝试学习TDD,但我很难理解我需要编写的一个小应用程序测试的内容/方法.
应用程序的(简化的)规范如下:
它需要从用户那里获取csv文件的位置,word文档mailmerge模板的位置和输出位置.
然后,应用程序将读取csv文件,对于每一行,将数据与单词模板合并并输出到指定的文件夹.
为了清楚起见,我不会问我将如何编写这样的应用程序,因为我确信如果我继续开始,我知道该怎么做.但是,如果我想使用TDD进行操作,那么我会猜测我不想测试读取真正的csv文件,或者测试执行合并的第三方组件或转换为pdf.
我认为只是一些一般的TDD指导将是一个很大的帮助!
在Eclipse的"Package Explorer"中,假设我有一个这样的包列表:
如果我想重构这个包结构,那么最终的包结构就像
所以基本上删除父包并将子包附加到其祖父母.我在"com.animal"包中有很多子包,我想尽可能避免手动执行此操作,然后在各处更改包导入.
我建议返回Collections.unmodifiableList()而不是直接返回一个成员变量,我的同事担心会有性能损失.当然,最好的答案是衡量它,我们可能会这样做 - 但我想知道你的经验和任何参考,赞成或反对.
我有这样的事情:
Map<String, String> myMap = ...;
for(String key : myMap.keySet()) {
System.out.println(key);
System.out.println(myMap.get(key));
}
Run Code Online (Sandbox Code Playgroud)
所以myMap.keySet()在foreach循环中调用一次?我想是的,但想要你的意见.
我想知道如果以这种方式使用foreach(myMap.keySet())会对性能产生影响,或者它等同于:
Set<String> keySet = myMap.keySet();
for (String key : keySet) {
...
}
Run Code Online (Sandbox Code Playgroud) 我知道为什么不应该这样做.但有没有办法向外行人解释为什么这是不可能的.你可以轻松地向外行解释:Animal animal = new Dog();.狗是一种动物,但是一系列的狗并不是动物的清单.
Eclipse警告我正在使用不推荐使用的方法:
eventDay = event.getEvent_s_date().getDate();
Run Code Online (Sandbox Code Playgroud)
所以我把它改写成了
eventDay = DateUtil.toCalendar(event.getEvent_s_date()).get(Calendar.DATE);
Run Code Online (Sandbox Code Playgroud)
它似乎工作,但它看起来很难看.我的问题是我是否以最好的方式重构了这个?如果没有,你会如何重构?我需要存储在bean中的日期的日期编号.
我最终在我的DateUtils中添加了一个方法来清理它
eventDay = DateUtil.getIntDate(event.getEvent_s_date());
public static int getIntDate(Date date) {
return DateUtil.toCalendar(date).get(Calendar.DATE);
}
Run Code Online (Sandbox Code Playgroud) 我即将对我的应用程序进行一些重构,然后我开始思考这个简单而复杂的主题,日志记录,如何做到干净,有效和信息丰富的日志记录......
当您阅读有关日志记录的文档时,您经常会看到此代码段
if (BuildConfig.DEBUG) {
Log.d(TAG + "message");
}
Run Code Online (Sandbox Code Playgroud)
它让我想知道它的目的是什么?根据文档Android Developer - Log,调试日志消息被编译但在运行时被剥离,因此您不需要在该if语句中进行日志调用.还是我想知道什么?
然后我也想知道使用除调试之外的任何其他Log.x()调用的真正好处是什么,因为用户不会看到日志条目或登录到某些错误文件,因此它们将被编译并执行在生产环境中没有任何目的?这可能是之前if语句的用例?
我之前提到过,日志条目没有记录到文件中.为什么这不是Android的内置功能?是因为性能问题,不必要的权限使用还是别的?我已经在我自己的日志类中实现了这个功能,但现在我想知道这是不好的做法?但是拥有重要日志条目的日志也很好吗?
因此,要在开发和生产过程中实现清洁,有效和信息丰富的日志记录.什么是最佳做法?
在网上发生数据传输的字节顺序是什么?是Little Endian还是big endian?一旦数据到达主机,它如何转换为相应的字节顺序?
我想在操作栏上设置progressBar但是设置
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarIndeterminateVisibility(true);
Run Code Online (Sandbox Code Playgroud)
on onCreate方法产生一个中等大小的progressBar(48dip x 48dip)我想.我想改变progressBar的大小,但我找不到如何做到这一点.你能帮我吗?
我的代码在Eclipse中编译得很好,但是当我尝试从命令行编译时(通过我们基于ruby的构建器系统),我收到以下错误消息:
static import only from classes and interfaces
Run Code Online (Sandbox Code Playgroud)
建议不允许静态导入公共静态字段.我应该寻找什么来帮助诊断这个问题?我该如何解决?
更新: per @Ted的请求,引用文件中的常量声明:
public static final String NULL = "<NULL>";
Run Code Online (Sandbox Code Playgroud)
和引用文件中的(bowdlerized)引用:
import static my.path.MyClass.NULL;
Run Code Online (Sandbox Code Playgroud) java ×6
android ×2
refactoring ×2
c# ×1
collections ×1
covariance ×1
date ×1
eclipse ×1
endianness ×1
foreach ×1
generics ×1
logcat ×1
logging ×1
loops ×1
oop ×1
packages ×1
performance ×1
tdd ×1
unmodifiable ×1