自动化测试必须能够快速反映实时项目状态.这个想法是:
这是我知道的最好的方法,以确定您的更改是否会破坏任何内容.
起初,似乎快速进行构建很难,但我们设法将它保持在100秒左右.105(!)项目的解决方案(MSVS 2008 C#).
测试似乎并不那么简单(我们使用NUnit FW).单元测试不是一个大问题.正是集成测试杀死了我们.而不是它们更慢的事实(关于如何使它们更快的任何想法都非常受欢迎)但事实上必须设置更慢(大约1000秒)的环境!
我们的集成测试使用需要重新部署的Web/win服务(目前为止19个),以反映最新的变化.这包括重新启动服务和大量HDD R/W活动.
任何人都可以分享环境和工作流程应该/可以组织/优化的经验,以加强自动化测试阶段.什么是"低级"瓶颈和解决方法.
PS书和广泛的文章是受欢迎的,但现实世界的工作解决方案更受欢迎.
在我们的产品中,我们有一个很大的实用程序文件,我们需要(带do)在很多文件的开头.有没有理由不把它变成一个模块?例如,而不是这样做:
do '../dbi_utilities.pl';
our ($db,$user,$pw,$attr);
my $Data = DBI->connect($db,$user,$pw,$attr) or die "Could not connect to database: $DBI::errstr";
Run Code Online (Sandbox Code Playgroud)
我不能这样做吗?:
use AppUtil;
my $Data = AppUtil->connect();
Run Code Online (Sandbox Code Playgroud) 我试图验证的XML如下:
<root>
<element attribute="foo">
<bar/>
</element>
<element attribute="hello">
<world/>
</element>
</root>
Run Code Online (Sandbox Code Playgroud)
如何使用Schema验证?
注意:
当attribute ="foo"时,element只能包含bar.
attribute ="hello"时,element只能包含world
我读过(并重新阅读)Martin Fowler的Mocks Are not Stubs.在其中,他定义了两种不同的TDD方法:"古典"和"模仿者".他试图回答" 我应该成为一个古典主义者还是一个嘲笑者? "这个问题,但他承认他从来没有尝试过模仿者TDD,而不仅仅是"玩具".所以我想我会问这个问题.好的答案可能会重复福勒的论点(但希望更清楚)或添加他没有想到的论点,或者其他人提出的论点,因为福勒上次在2007年1月更新了这篇论文.
我对学习C感兴趣.我读过K&R,甚至在R和Python中做过一些简单的C扩展工作.使用C做更实质的事情有什么值得的项目想法?任何好的在线资源,类似于Dive Into Python?特别是,资源专注于已经知道正在尝试学习C的新语言的程序员(提到诸如"在C中询问数组的长度是无意义的,你懒惰的Pythonista").
我的背景:
数学/统计学,Python,R中的日常编程,主要围绕自然语言处理,算法等.
这些代码中的哪一段更快?
if (obj is ClassA) {}
if (obj.GetType() == typeof(ClassA)) {}
Run Code Online (Sandbox Code Playgroud)
编辑:我知道他们不会做同样的事情.
C#中是否有一种方法可以直接从System.IO.Stream播放音频(例如MP3),例如从WebRequest返回而不将数据临时保存到磁盘?
在NAudio 1.3 的帮助下,可以:
如果能够播放半载MP3文件本来不错,但由于NAudio库设计,这似乎是不可能的.
这是完成工作的功能:
public static void PlayMp3FromUrl(string url)
{
using (Stream ms = new MemoryStream())
{
using (Stream stream = WebRequest.Create(url)
.GetResponse().GetResponseStream())
{
byte[] buffer = new byte[32768];
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
}
ms.Position = 0;
using (WaveStream blockAlignedStream =
new BlockAlignReductionStream(
WaveFormatConversionStream.CreatePcmStream(
new Mp3FileReader(ms))))
{
using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
{ …Run Code Online (Sandbox Code Playgroud) 我有一个发送大小东西的表单,我需要查看字符串是什么,以便我可以相应地设置价格.当我尝试这样做时,它说它们不相等,我没有价格.这是我正在使用的代码:
if ($_POST['sizes'] == "Small ($30)"){$total = "30";}
if ($_POST['sizes'] == "Medium ($40)"){$total = "40";}
if ($_POST['sizes'] == "Large ($50)"){$total = "50";}
else {$total = $_POST['price'];}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?我可以回显$ _POST ['sizes'],它只给我一个这样的东西.
在Java中,是否有一种优雅的方法来检测在运行finally块之前是否发生了异常?处理"close()"语句时,通常需要在finally块中进行异常处理.理想情况下,我们希望保留两个异常并将它们传播(因为它们都可能包含有用的信息).我能想到的唯一方法是在try-catch-finally范围之外设置一个变量来保存对抛出异常的引用.然后使用finally块中发生的任何内容传播"已保存"的异常.
有更优雅的方式吗?也许API调用会揭示这个?
这是我正在谈论的一些粗略代码:
Throwable t = null;
try {
stream.write(buffer);
} catch(IOException e) {
t = e; //Need to save this exception for finally
throw e;
} finally {
try {
stream.close(); //may throw exception
} catch(IOException e) {
//Is there something better than saving the exception from the exception block?
if(t!=null) {
//propagate the read exception as the "cause"--not great, but you see what I mean.
throw new IOException("Could not close in finally block: " + e.getMessage(),t);
} else …Run Code Online (Sandbox Code Playgroud)