我正在寻找改进一个我相信当它的输入在多个工作线程之间共享时不是线程安全的包.根据TDD原则,我应该首先编写一些失败的测试,这些测试在评估问题时肯定会有用.
我意识到这并不是一件简单的事情,而且天真的多线程测试将是不确定的,因为操作系统将确定调度以及各种操作交错的确切顺序.我过去看过并使用过MultithreadedTC,这很有用.但是,在这种情况下,我事先知道现有实现的确切位置,从而能够完成一系列覆盖它的测试.
但是,如果你还没有确切知道问题是什么,那么是否有一种很好的方法来编写一个很有可能抛出任何潜在问题的测试?是否有其他人发现有用的图书馆?我是否正确地认为,从纯粹的角度来看,多线程测试用例应该与通常的单线程测试一样是相同的调用和断言,只适用于多个工作线程?
我们欢迎任何有关工具/最佳实践/理念的提议.
我目前正在为包含验证例程的业务逻辑类编写一些单元测试.例如:
public User CreateUser(string username, string password, UserDetails details)
{
ValidateUserDetails(details);
ValidateUsername(username);
ValidatePassword(password);
// create and return user
}
Run Code Online (Sandbox Code Playgroud)
我的测试夹具是否应该包含对Validate*方法中可能出现的每个可能的验证错误的测试,或者最好将其留给一组单独的测试?或许验证逻辑应该以某种方式重构?
我的理由是,如果我决定测试CreateUser中可能发生的所有验证错误,那么测试夹具将变得非常臃肿.大多数验证方法都是在不止一个地方使用的......
在这种情况下有任何好的模式或建议吗?
我有格式的日期2008-12-23T00:00:00Z.这看起来很像带有祖鲁(UTC)时区的ISO 8601格式.我虽然以下代码将解析它(使用commons-lang):
String pattern = DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.getPattern();
Date d = DateUtils.parseDate(dateToParse, new String[] { pattern });
Run Code Online (Sandbox Code Playgroud)
如果我采用相同的模式(yyyy-MM-dd'T'HH:mm:ssZZ)但删除时区,它的工作原理.
你知道我如何识别祖鲁时区吗?我只能访问Java 1.4和Jakarta commons-lang.没有Joda时间对我来说......
使用TortoiseSVN,我需要在分支中进行更改,然后将它们与Trunk合并.
我是这个项目的唯一开发人员,所以我知道trunk没有改变.我正在学习SVN,以便最终我的团队可以使用它.
基本上,我希望我的后备箱看起来与分支完全一样.
在pre-svn world中,我只是复制我的分支文件夹中的文件,删除trunk文件夹中的文件,然后将分支复制到trunk.
在TortoiseSVN中,我尝试过"重新整合分支","合并一系列修订"和"合并两棵不同的树".似乎没有什么能改变干线.我也试过在行李箱顶部进行分支.这给了我一个错误,说干线已经存在.
在这一点上,我只是无知地按钮mashing希望有些东西有效.
原始CruiseControl和.NET端口之间有什么区别吗?我比较了2,但除了它已经开发的语言之外找不到任何重大差异.我想使用其中一个用于(自动)测试Web应用程序,使用Selenium和Subversion,甚至Groovy但是不知道选哪个.
[编辑]在看了CC和Hudson之后,我选择了Hudson,因为它很简单,它已经有了运行Groovy脚本和Selenium的插件
testing cruisecontrol.net continuous-integration cruisecontrol
我真的很感激任何建议,无论多么简单或复杂,帮助我解决这个问题.
我有一些生成小报告文件的代码.对于集合中的每个文件,执行存储过程以通过XML阅读器获取数据(它是一个非常大的结果集).当我创造了这一切,并逐步完成它,一切都很好.生成文件,没有错误.
该库通过远程处理调用,并通过IIS托管.当我部署已编译的库并调用它时,它能够生成一些报告,但随后会抛出一个Thread Abort Exception.如果我将调试器附加到asp工作进程,并逐步执行代码,我没有问题.
看到这种失败是非常一致的,我寻找相似之处并发现失败发生在不同的报告上,但似乎发生在大约相同的时间点.
这让我认为这是一个超时设置,调试器重写,我做了一些粗略的整个过程时间(不是单一的失败代码),它似乎在大约200秒后失败.web.config executionTimeout设置为600分钟(足够高).此服务器应用程序还有其他部分需要COM +事务(2分钟超时),但这不是其中之一.我不知道它可能达到的超时时间(大约200秒大关).
SQL Connection超时默认保留(连接成功打开),命令超时为300秒(执行命令只需12-15).
我运行了SQL分析器,它显示结果正确返回(所有语句和RPC完成 - 没有错误).通过SSMS执行代码可提供完美的结果.
使用反射器,我钻进了SNINativeMethodWrapper,它是非托管代码的包装器,我无法看到它试图实际做什么.我只能假设(可能错误地)代码已经从SQL服务器接收到TDS,并且包装器试图获得与数据包关联的连接,但它不能.
我尝试使用不同的方法(ExecScalar,DataAdapter),但它们都在内部使用ExecuteReader.
我尝试禁用连接池并强制客户端使用与服务器相同的数据包大小.
Private Function GetDataAsXmlDoc(ByVal cmd As SqlClient.SqlCommand) As XmlDocument
Dim _xmlDoc As XmlDocument
Using _connection As New SqlClient.SqlConnection(GetConnectionString())
Logging.DebugEvent.Raise(Me.GetType.Namespace, Reflection.MethodBase.GetCurrentMethod().Name, _
"No cached data found or used. Getting data for report from the database using SQL connection.")
Dim _xmlReader As XmlReader
'DataAdapter,ExecuteScalar, ExecuteXmlReader all use ExecuteReader internally and suffer the same problem.'
'If you dont believe me, reflect it …Run Code Online (Sandbox Code Playgroud) MSDN文档说明:指示SQL Server是否将该列用作ROWGUID.您只能为唯一标识列将此值设置为"是".
这并没有告诉我为什么我会启用或禁用此功能.
我有一个在Websphere应用服务器上运行的Java应用程序.当我分析系统崩溃核心转储文件时,我得到一些这样的信息:
ERROR: Symbol file could not be found. Defaulted to export symbols for J9THR23.dll
Run Code Online (Sandbox Code Playgroud)
如何获取Java的符号文件?
提前致谢.
更多细节在这里:
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
*** ERROR: Symbol file could not be found. Defaulted to export symbols for J9THR23.dll -
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have …Run Code Online (Sandbox Code Playgroud) 如果我有如下数据
A | 01/01/2008 00:00:00
B | 01/01/2008 01:00:00
A | 01/01/2008 11:59:00
C | 02/01/2008 00:00:00
D | 02/01/2008 01:00:00
D | 02/01/2008 20:00:00
我想只选择标识符(A,B,C或D)在12小时内发生两次的记录.在上面这个例子中,这只是'A'
任何人都可以帮忙(这是针对Oracle数据库)
谢谢
中号
java ×3
.net ×1
ado.net ×1
branch ×1
c ×1
c# ×1
c++ ×1
coredump ×1
date ×1
iis-6 ×1
oracle ×1
parsing ×1
sql ×1
sql-server ×1
tdd ×1
testing ×1
thread-abort ×1
timezone ×1
tortoisesvn ×1
trunk ×1
unit-testing ×1
validation ×1
vb.net ×1
websphere ×1