我正在使用Spring MVC在SQL Server数据库之上构建一个薄层.当我开始测试时,似乎它不能很好地处理压力:).我正在使用Apache Commons DBCP来处理连接池和数据源.
当我第一次尝试~10-15个同时连接时,它曾经挂起并且我必须重新启动服务器(对于dev我正在使用Tomcat,但我最终必须部署在Weblogic上).
这些是我的Spring bean定义:
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="[...]"/>
<property name="username" value="[...]" />
<property name="password" value="[...]" />
</bean>
<bean id="partnerDAO" class="com.hp.gpl.JdbcPartnerDAO">
<constructor-arg ref="dataSource"/>
</bean>
<!-- + other beans -->
Run Code Online (Sandbox Code Playgroud)
这就是我使用它们的方式:
// in the DAO
public JdbcPartnerDAO(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
// in the controller
@Autowired
private PartnerDAO partnerDAO;
// in the controller method
Collection<Partner> partners = partnerDAO.getPartners(...);
Run Code Online (Sandbox Code Playgroud)
周围一点点看完后,我发现maxWait,maxActive和maxIdle对性能的BasicDataSource(从 …
例如,如果我有以下要测试的类:
public class SomeClass{
public void someMethod() {
try {
//Some code, where comething could go wrong
} catch (Exception err) {
//Handling it amounts to logging the problem and trying to continue
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我随后使用 JUnit 测试此方法,那么如果 try 子句中出现问题并且运行 catch 代码,则测试将通过。
我想这样做,以便在运行 catch 子句指令时测试将失败。
我确实想到了一些可以尝试编写测试的方法,以便获得等效的功能,但是对于每种方法,我都不想以这种方式进行处理。如果达到任何 catch 子句,则尝试使测试失败似乎是最干净的方法,如果这实际上是可能的
笔记:
我知道我可以验证代码的某些功能并检查它们是否是某个值/是否已经使用 Mockito 运行了多次。但是,我想要一个解决方案,如果对测试方法进行了更改,从根本上改变了它的工作方式(但不是本质上正在执行的任务),那么我将不必重写测试。
不幸的是,为了使这个问题更加困难,我无法对源代码进行任何修改。这个位置不在我的控制范围内,所以我必须在这些范围内工作。
编辑:
SomeClass 是我希望测试的类。它不是实际的 JUnit 测试。我已经编辑了我的原始问题以尝试澄清这一点。
想象一下,我在单元测试的代码中有以下行:
SomeClass.method1().method2();
Run Code Online (Sandbox Code Playgroud)
SomeClass是一个类,method1()是SomeClass中的一个静态方法,它返回一些例如'aClass'的实例,而method2()是一个可以从'aClass'实例调用的方法.
是否可以模拟整个链,以便我可以返回我想要的结果?目前我知道我可以做类似的事情:
BDDMockito.given(SomeClass.method1()).willReturn(mockedAClass);
when(mockedAClass.method2()).thenReturn(true);
Run Code Online (Sandbox Code Playgroud)
但我宁愿做这样的事情:
when(SomeClass.method1().method2()).thenReturn(true);
Run Code Online (Sandbox Code Playgroud)
这可能吗?
编辑:这个问题被标记为重复,但我的问题和'重复'之间存在一个相当大的差异.在我的问题中,第一种方法是静态的,第二种方法不是.我似乎无法让mockito链接模拟这种静态方法,这让我相信它不是同一个答案.
我有一个存储过程,它有四个参数.我想在另一个脚本中调用它,但是当我这样做时,我还没有确切地知道我想要通过它.我正在尝试内联存储过程.所以我的行看起来像这样:
EXEC stored_procedure
@firstparam,
@secondparam,
CASE @thirdparam
WHEN null THEN 0
ELSE 1
END,
CASE @fourthparam
WHEN null THEN 0
ELSE 1
END
Run Code Online (Sandbox Code Playgroud)
但是我在以下部分附近得到了"错误语法"这个非常含糊的错误:
我只是想能够执行一个CASE语句,根据第三和第四个参数传递正确的变量.
当我尝试使用apache POIs XSSFReader获取Excel文件的样式表时,我有一段代码错误.涉及该文件的所有操作如下所示:
XSSFReader reader = new XSSFReader(OPCPackage.open(excelFile.getPath(), PackageAccess.READ));
StylesTable table = reader.getStylesTable();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
引起:java.io.IOException:检测到Zip炸弹!该文件将超过某些限制,这通常表明该文件用于夸大内存使用量,因此可能带来安全风险.如果需要处理超出这些限制的文件,可以通过setMinInflateRatio()和setMaxEntrySize()调整这些限制.计数器:1644067,cis.counter:16384,比率:0.009965530601855033Limits:MIN_INFLATE_RATIO:0.01,MAX_ENTRY_SIZE:4294967295
我不知道如何判断这是否是误报(在Excel中打开文件似乎没问题),如果是这样,如何正确处理这个?