我正在遗留项目上做一些JavaScript清理工作,并试图摆脱冗余的JS库.我做了所有明显的(那些根本不是任何参考).但是所有页面都包含了许多JS文件(通过磁贴).
我怎样才能知道它们是否实际使用,没有浏览每个内容并搜索其中的每个功能?有更智能/更简单的方法吗?这是一个基于java的/ Spring项目,如果顺便说一下有帮助的话.
如何为具有using语句的方法编写单元测试?
例如,假设我有一个方法Foo.
public bool Foo()
{
using (IMyDisposableClass client = new MyDisposableClass())
{
return client.SomeOtherMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能测试上面的代码?
有时我选择不手动使用using语句和Dispose()对象.我希望有人会告诉我一个我可以使用的技巧.
我正在尝试为遗留代码编写单元测试.我正在测试的类有几个静态变量.我的测试用例类有几个@Test方法.因此,他们都拥有相同的状态.
有没有办法在测试之间重置所有静态变量?
我提出的一个解决方案是明确重置每个字段,例如:
field(MyUnit.class, "staticString").set(null, null);
((Map) field(MyUnit.class, "staticFinalHashMap").get(null)).clear();
Run Code Online (Sandbox Code Playgroud)
如您所见,每个变量都需要自定义重新初始化.这种方法不容易扩展,遗留代码库中有很多这样的类.有没有办法一次性重置所有内容?也许每次重新上课?
作为一个可能的好解决方案,我认为是使用类似powermock的东西,并为每个测试创建一个单独的类加载器.但我看不到简单的方法.
Use legacy android.support libraries创建新项目时是否应该选择该选项?如果我不选择此选项会怎样?

情况:数百万行代码,超过一百个开发人员和频繁的缺陷.我们希望避免重复缺陷,我们希望改进代码设计(谁没有?).
测试驱动开发(第一个单元测试,然后是代码)听起来很理想:为每个函数编写一个测试用例.
但是,由于编写了如此多的代码,如何实现TDD?你从哪里开始 - 低级功能?
或者我们来不及启动TDD?
下面的C++代码编译并作为GCC上的程序员工作(4.0.4)
#define FOO(x,y,z) ((x)*(y)*(z))
#define BAR(x) FOO(x,1)
#define BAZ 3,7
int main()
{
return BAR(BAZ); /* interpreted as return ((3)*(7)*(1)); */
}
Run Code Online (Sandbox Code Playgroud)
但是,宏在Microsoft Visual C++ Express 2010上导致错误:
main.cpp(7):警告C4003:宏'
FOO'main.cpp(7)的实际参数不够:错误C2059:语法错误:')'
问题似乎是Microsoft编译器在内部处理BAR宏时,不会将BAZ宏扩展为可用作宏FOO的两个独立参数的参数.
根据标准,哪个编译器正确处理了这种情况?
刚刚阅读了重构:改进现有代码设计的前四章,我开始了我的第一次重构,几乎立即陷入了障碍.它源于要求在开始重构之前,应该对遗留代码进行单元测试.这使您可以确保您的重构没有改变原始代码所做的事情(只是它是如何做到的).
所以我的第一个问题是:如何在遗留代码中对方法进行单元测试?如何在500行(如果我很幸运)的方法中进行单元测试,而不是只执行一项任务?在我看来,我必须重构我的遗留代码只是为了让它可以进行单元测试.
有没有人有使用单元测试重构的经验?如果是这样,你有什么实际的例子可以和我分享吗?
我的第二个问题有点难以解释.这是一个例子:我想重构一个从数据库记录填充对象的遗留方法.我不是必须编写一个单元测试,将使用旧方法检索的对象与使用重构方法检索的对象进行比较吗?否则,我怎么知道我的重构方法产生与旧方法相同的结果?如果这是真的,那么我在源代码中保留旧的弃用方法多长时间?在测试几个不同的记录后,我是否只是打了它?或者,如果我在重构的代码中遇到错误,是否需要保留一段时间?
最后,由于有几个人问过......遗留代码最初是用VB6编写的,然后移植到VB.NET,只需要进行最少的架构更改.
我的同事们疯了,因为我一直想重写已经有效的代码,因为我想用设计模式替换一些遗留设计.虽然我觉得它有助于改进现有的代码,但我觉得我对此有点偏执,并尝试在任何地方使用它们,甚至用另一种代替一种设计模式.我的一些同事说,只要遗留代码有效,就不要管它.
我应该什么时候停止使用它们?你在哪里画出需要用更好的设计代替的代码和不需要触摸的代码之间的界限?
我们是一个致力于遗留代码的团队,这些代码非常陈旧,并且使用初始编程时的语言编写.由于团队成员接受过最新技术方面的培训,现在他们开始使用遗留代码,他们并不高兴.如何激励他们在遗留代码中工作呢?
我正在开发一个C++应用程序,它使用另一个团队用C编写的库.库的编写者喜欢exit()在发生错误时调用,这会立即结束程序,而不会在C++应用程序中调用堆栈上对象的析构函数.应用程序设置了一些系统资源,这些资源在进程结束后不会被操作系统自动回收(共享内存区域,进程间互斥等),因此这是一个问题.
我有应用程序和库的完整源代码,但是库已经非常完善,并且没有单元测试,因此更改它将是一个大问题.有没有办法"挂钩"调用,exit()以便我可以为我的应用程序实现正常关闭?
我正在考虑的一种可能性是创建一个大类,即应用程序 - 意味着所有清理都会在其析构函数或其成员之一的析构函数中发生 - 然后在堆中分配其中一个大对象main(),设置全局指向它的指针,并atexit()用于注册一个只通过全局指针删除对象的处理程序.那可能有用吗?
有没有一种已知的好方法来解决这个问题?
legacy-code ×10
unit-testing ×4
c++ ×2
android ×1
androidx ×1
c# ×1
code-cleanup ×1
idisposable ×1
java ×1
javascript ×1
jquery ×1
macros ×1
refactoring ×1
tdd ×1
testing ×1