我目前正在为遗留应用程序构建CI构建脚本.有可用的零星JUnit测试,我将把所有测试的JUnit执行集成到CI构建中.但是,我想知道如何处理我在非维护的JUnit测试中遇到的100'失败.我是:
1)评论它们,因为它们似乎在其中具有合理的,如果没有维护的业务逻辑,希望有人最终取消注释并修复它们
2)删除它们,因为不太可能有人会修复它们,注释掉的代码只会被忽略或者变得杂乱无章
3)追踪那些把这个烂摊子留在我手中的人,并用代码的打印件将其打在头上(由于长方法气味将足以适合任务),同时宣扬维护良好的和单元测试代码库
我正在尝试将Laravel慢慢集成到一个遗留的PHP应用程序中.其中一项任务是在用户登录旧应用程序时自动注册Laravel用户会话.我不是想实现Laravel身份验证,我真的只想捎带现有功能并强制特定用户登录而不检查凭据.到目前为止,我所发现的是从我发现的其他人的黑客中拼凑而成的:
// Laravel authentication hook - Boostrap application
require_once getcwd() . '/../laravel/bootstrap/autoload.php';
$app = require_once getcwd() . '/../laravel/bootstrap/app.php';
$kernel = $app->make('Illuminate\Contracts\Console\Kernel');
$kernel->bootstrap();
$app->boot();
// Start Laravel session
$request = Illuminate\Http\Request::capture();
$response = $app->make('Symfony\Component\HttpFoundation\Response');
$startSession = new Illuminate\Session\Middleware\StartSession($app['session']);
// Associate server session with the authenticating user id
// I have also tried loading user model instance and then $app['auth']->login($user)
$app['auth']->loginUsingId($user_id);
$app['session']->driver()->start();
// Terminate middleware response chain with naked response
$response = $startSession->handle($request, function() use($response) {
return $response; // This response will …Run Code Online (Sandbox Code Playgroud) 我们正在使用基于gcc 2.6.0的遗留编译器来交叉编译我们仍在使用的旧嵌入式处理器(是的,它自1994年以来一直在使用!).为这款芯片做gcc端口的工程师早就开始了.虽然我们可以从网络上的某个地方恢复gcc 2.6.0源代码,但这个芯片的更改集已经在公司历史的大厅中消失了.直到最近,由于编译器仍然运行并生成可行的可执行文件,我们一直糊涂,但是从Linux内核2.6.25(以及2.6.26)开始,它失败并显示消息gcc: virtual memory exhausted......即使在没有参数的情况下运行或仅运行-v.我已经使用2.6.24内核重新启动了我的开发系统(从2.6.26开始)并且编译器再次工作(使用2.6.25重启不会).
我们有一个系统,我们保留在2.6.24只是为了为这个芯片做构建,但是感觉有点暴露,以防linux世界转移到我们不能再重建一个将运行的系统的程度编译器(即我们的2.6.24系统死机,我们无法在新系统上安装和运行2.6.24,因为某些软件部分不再可用).
有没有人有任何想法,我们可以做一些更现代的安装,以使这个遗留的编译器运行?
编辑:
回答一些评论......
遗憾的是,这是我们芯片特有的源代码更改丢失了.这种损失发生在两个主要的公司重组和几个系统管理员(其中一些确实留下了一团糟).我们现在使用配置控制,但这对于这个问题来说太晚关闭了谷仓门.
使用VM是一个好主意,也可能是我们最终要做的.谢谢你的想法.
最后,我尝试了strace作为ephemient建议,发现最后一次系统调用是brk(),它在新系统(2.6.26内核)上返回错误并在旧系统(2.6.24内核)上返回成功.这表明我真的用完了虚拟内存,除了tcsh"limit"在旧系统和新系统上返回相同的值,而/ proc/meminfo显示新系统有更多的内存和更多的交换空间.也许这是一个碎片问题或程序加载的地方?
我做了一些进一步的研究,并在内核2.6.25中添加了"brk randomization",但是CONFIG_COMPAT_BRK默认情况下会启用(禁用brk随机化).
编辑:
好的,更多信息:它看起来真的像brk随机化是罪魁祸首,传统的gcc正在调用brk()来改变数据段的结束并且现在失败,导致传统的gcc报告"虚拟内存耗尽".有一些记录的方法可以禁用brk随机化:
sudo echo 0 > /proc/sys/kernel/randomize_va_space
sudo sysctl -w kernel.randomize_va_space=0
用setarch i386 -R tcsh(或"-R -L")开始一个新的shell
我已经尝试了它们,它们确实有效,因为brk()返回值与没有它们(并且在内核2.6.25和2.6.26上都试过)不同(并且总是相同),但是brk()仍然失败,所以传统的gcc仍然失败:-(.
此外,我已经设置vm.legacy_va_layout=1并vm.overcommit_memory=2没有改变,我已经与重新启动vm.legacy_va_layout=1,并kernel.randomize_va_space=0保存在/etc/sysctl.conf中的设置.仍然没有变化.
编辑:
使用kernel.randomize_va_space=0内核2.6.26(2.6.25和)在以下brk的结果()通过所报告的呼叫strace legacy-gcc:
brk(0x80556d4) = 0x8056000
这表明brk()失败了,但看起来它失败了,因为数据段已经超出了请求的范围.使用objdump,我可以看到数据段应该以0x805518c结束,而失败的brk()表示数据段当前以0x8056000结束:
Sections: Idx Name Size VMA LMA File off Algn 0 .interp 00000013 080480d4 080480d4 000000d4 2**0 …
我试图说服我公司的一些高级人员在两个系统之间以结构化格式传输数据的优势.
目前,一个系统输出平面文本文件,并且必须编写复杂的解析器以在另一侧提取数据.每次更改数据时,都必须调整"位置",这是维护和测试的难题.
这里的双方都有内置的用于创建和操作XML的工具,所以我所追求的是一篇有说服力的文章,文档,博客文章等,引入XML(或任何其他标记语言)作为针对可能的人的平面文本的替代之前没有合作过.
非常感谢
到目前为止,我工作的项目只在源代码中使用ASCII.由于I18N领域即将发生的一些变化,以及我们在测试中需要一些Unicode字符串,我们正在考虑咬住子弹并将源代码移动到UTF-8,同时使用utf8pragma(use utf8;)
由于代码现在是ASCII,我不希望代码本身有任何问题.但是,我不太清楚我们可能会遇到任何副作用,而我认为考虑到我们的环境(perl5.8.8,Apache2,mod_perl,带FreeTDS驱动程序的MSSQL服务器),我很可能会得到一些副作用.
如果你过去做过这样的迁移:我可以期待什么问题?我该如何管理它们?
在请求帮助管理Java中相同库的不同版本的依赖关系之后,有人建议我应该看看OSGI实现.在最后期限的压力下,我真的可以使用一些帮助来帮助我从无休止的OSGI文档中挖掘出来.我有一个工作的应用程序,它将使用一个新的框架.框架使用我已经使用的不同版本的jar,所以我想将新框架打包为OSGI包.我可以保留我的应用程序,并将OSGI包仅用作JVM中的容器吗?这意味着我将仅使用OSGI包来从JVM的其余部分中隔离一组类,以避免不同版本的类之间发生冲突.换句话说,我想使用OSGI而不将我的所有代码都带到基于OSGI的设置.
亲切的问候Seref
我继承了一些经典ASP代码,我需要一个可以实例化的JSON库,并在服务器端运行,以便与JavaScript编码的服务器端ASP一起使用.
我怎样才能做到这一点?
我想用Logback将slf4j改造成遗留应用程序.好的是,遗留应用程序有自己的日志框架.所以我所要做的就是改变日志框架以登录到slf4j而不是log4j.
它就像一场梦.我很高兴,直到我注意到为每个日志事件记录的Logback位置:
Logger.java:...
Run Code Online (Sandbox Code Playgroud)
哎呀!在试图弄清楚日志事件的来源时,这对我的开发人员来说无济于事.
如何告诉Logback在堆栈中查看实际位置的几个级别?
logger类是一个实用程序类,其方法如下:
public static void debug(String clazz, String message) {
org.slf4j.Logger logger = LoggerFactory.getLogger(clazz);
logger.debug(message);
}
Run Code Online (Sandbox Code Playgroud) 我有一个非常古老而写得不好的Rails应用程序.大约有9000行代码和零测试.大多数代码都在控制器中,更糟糕的是,有大量的外部API调用,对随机脚本的系统调用等.
也没有开发环境,所有东西都设置为对生产数据库起作用.不仅仅是一个数据库,还有大约10个不同的数据库,因为该应用程序是一个更大的站点的管理后端.
我的第一个想法是围绕我将要处理的部分至少获得一些不错的测试覆盖率,但是我无法在生产服务器上的其他地方工作.
还有大量的旧宝石和不赞成的警告,但我甚至无法考虑升级宝石,直到有测试.重写整个不是一个选择,我将不得不尽快添加/更改东西.
我不太确定如何测试这样的应用程序,因为有太多东西可能出错.我真正想做的是编写一些集成测试,然后开始重构,但我不能在生产环境中这样做.
使用一堆存根和模拟编写单元测试似乎没有用,因为我要处理的代码基本上必须从头开始重写.
我可以采取哪些步骤来基本复制我的开发机器上的巨大复杂生产环境,所以我可以孤立地做一些事情?
编辑:关于应用程序的一个有趣的事实.当我试图运行它的第一次,它一直在没有任何错误消息冻结......直到大约一个半小时后,我发现,那超时连接到数据库(这是不可用)设置为90分钟!
我正在尝试创建两个测试,其中一个依赖于另一个的执行.我正在处理的项目充满了遗留代码,所以我试图使应用程序的主要部分可测试.第一个测试基本上会尝试创建一些与数据库的连接并设置一些静态变量.然后,Test2将使用连接和变量来插入一些数据.我宁愿不做Test1在Test2中再做一次的事情.
我已经使Test2依赖于test1,因此如果Test1失败,Test2将不会执行.但如果Test2失败,我希望它能够重新运行.当我在Intellij IDEA中尝试这个时,我得到以下内容:
java.lang.Throwable: Method a.stack.Test2.failingTest() depends on nonexistent group "FirstTest"
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
测试1:
package a.stack;
import org.testng.Assert;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
/**
* The First test
*/
@Test(groups = {"FirstTest"})
public class Test1 {
public void init(){
// Initialize something which other tests should use
Assert.assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud)
和Test2:
package a.stack;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
*
*/
@Test(groups = {"OtherTests"}, dependsOnGroups = {"FirstTest"})
public class Test2 {
public void failingTest(){
Assert.assertTrue(false);
}
}
Run Code Online (Sandbox Code Playgroud)
testng.xml文件:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > …Run Code Online (Sandbox Code Playgroud) legacy ×10
java ×4
testing ×2
xml ×2
asp-classic ×1
gcc ×1
integration ×1
javascript ×1
json ×1
junit ×1
laravel ×1
laravel-5.4 ×1
linux ×1
logback ×1
migration ×1
osgi ×1
perl ×1
php ×1
refactoring ×1
ruby ×1
slf4j ×1
standards ×1
testng ×1
unicode ×1
utf-8 ×1