小编Kre*_*ase的帖子

模拟系统类时Mockito + PowerMock LinkageError

我有这样的代码片段:

@RunWith(PowerMockRunner.class)
@PrepareForTest({Thread.class})
public class AllMeasuresDataTest {

@Before
public void setUp() throws Exception {
}

@Test
public void testGetMeasures() {
    AllMeasuresData measure = new AllMeasuresData();
    assertEquals(measure.getMeasures(), null);
    HashMap<String, Measure> map = new HashMap<String, Measure>();
    measure.setMeasures(map);
    assertEquals(measure.getMeasures(), map);
    measure.setMeasures(null);
    assertEquals(measure.getMeasures(), null);
}

@Test
public void testAllMeasuresData() throws IOException {
    ClassLoader loader = PowerMockito.mock(ClassLoader.class);
    Thread threadMock = PowerMockito.mock(Thread.class);
    Vector<URL> vec = new Vector<URL>();
    Mockito.when(loader.getResources("measure")).thenReturn(vec.elements());
    Mockito.when(threadMock.getContextClassLoader()).thenReturn(loader);
    PowerMockito.mockStatic(Thread.class);
    Mockito.when(Thread.currentThread()).thenReturn(threadMock);
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在运行此测试时,我得到了:

java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/MockClassLoader) previously initiated loading …
Run Code Online (Sandbox Code Playgroud)

java junit4 mockito powermock linkageerror

146
推荐指数
7
解决办法
7万
查看次数

iPhone:使用导航栏显示模态UITableViewController

我正在展示一个UITableViewController类的模态视图.出于某种原因,当我显示它时,它不会显示导航栏.这是我的代码:

SettingsCreateAccount *detailViewController = [[SettingsCreateAccount alloc] initWithStyle:UITableViewStyleGrouped];
    detailViewController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    detailViewController.navigationController.navigationBarHidden = NO;
    [self.navigationController presentModalViewController:detailViewController animated:YES];
    detailViewController = nil;
    [detailViewController release];
Run Code Online (Sandbox Code Playgroud)

我以为它是默认显示的?如果它有帮助,我从另一个同样UITableViewController由a管理的类中调用它UINavigationController.想法?

iphone objective-c uitableview ios

86
推荐指数
6
解决办法
5万
查看次数

如何处理Java中的LinkageErrors?

我开发了一个基于XML的大量Java应用程序,最近在Ubuntu Linux上遇到了一个有趣的问题.

我的应用程序使用Java插件框架,似乎无法将dom4j创建的XML文档转换为Batik的 SVG规范实现.

在控制台上,我了解到发生了错误:

Exception in thread "AWT-EventQueue-0" java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.apache.batik.dom.svg.SVGOMDocument.createAttribute(Ljava/lang/String;)Lorg/w3c/dom/Attr;" the class loader (instance of org/java/plugin/standard/StandardPluginClassLoader) of the current class, org/apache/batik/dom/svg/SVGOMDocument, and the class loader (instance of <bootloader>) for interface org/w3c/dom/Document have different Class objects for the type org/w3c/dom/Attr used in the signature
    at org.apache.batik.dom.svg.SVGDOMImplementation.createDocument(SVGDOMImplementation.java:149)
    at org.dom4j.io.DOMWriter.createDomDocument(DOMWriter.java:361)
    at org.dom4j.io.DOMWriter.write(DOMWriter.java:138)

我认为问题是由JVM的原始类加载器与插件框架部署的类加载器之间的冲突引起的.

据我所知,不可能为框架指定要使用的类加载器.它可能是破解它,但我宁愿采用一种不那么积极的方法来解决这个问题,因为(无论出于什么原因)它只发生在Linux系统上.

你们其中一个遇到过这样的问题,并且知道如何解决这个问题或至少解决问题的核心问题?

java linux classloader linkageerror

59
推荐指数
4
解决办法
9万
查看次数

如何在rails中异步加载部分页面

在rails/jquery app上创建ruby时,生成页面的一部分非常耗时.

我想更改页面的加载方式,以便大多数页面立即加载,并为占用异步加载的部分保留占位符,并在完成后使用ajax/jquery注入页面.

我现在拥有的(简化):

应用程序/视图/样品/ show.html.erb:

<div id="theResult">
    <%= render :partial => 'calculate', :object => @org) %>
</div>
Run Code Online (Sandbox Code Playgroud)

而部分将使用@org的一些部分来生成一些内容(命中另一个外部REST服务).

应用程序/视图/样品/ _calculate.html.erb

<%
    # code to take org and turn it into content
%>
<!--...html to display results here -->
Run Code Online (Sandbox Code Playgroud)

我意识到这可能违反了正确的MVC架构规则,因为我的部分似乎有太多的逻辑,并且想要清理它...

所以我想我有两个问题:(1)我如何让它工作,以及(2)我应该如何清理它以遵循良好的ruby/rails/mvc做法?

ajax jquery ruby-on-rails

39
推荐指数
2
解决办法
2万
查看次数

java.lang.LinkageError:javax.servlet.jsp.JspApplicationContext.getExpressionFactory

当我尝试在Tomcat 7上运行我的webapp时,我得到以下异常:

exception

javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;
" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/index_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, 
have different Class objects for the type javax/el/ExpressionFactory used in the signature
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:343)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/index_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for …
Run Code Online (Sandbox Code Playgroud)

jsp tomcat servlets linkageerror

29
推荐指数
2
解决办法
7万
查看次数

如何自动扩展Amazon DynamoDB吞吐量?

Amazon DynamoDB不提供内置功能,可根据动态负载自动调整吞吐量.它提供API来增加或减少吞吐量.客户按小时计算配置的读写吞吐量.

有哪些方法可以改变dynamodb的吞吐量并实现成本节约的好处?

amazon-web-services amazon-dynamodb

29
推荐指数
4
解决办法
2万
查看次数

如何在多个测试类之间共享JUnit BeforeClass逻辑

目前,我的所有JUnit测试都是从提供标记有注释@BeforeClass@AfterClass注释的方法的公共基类扩展而来的 - 所有这些都是为了要使用的测试设置一堆静态资源/服务.

由于以下几个原因,这对我来说似乎很尴尬:

  1. JUnit4的一部分(根据我的理解)是我们不再需要这种经典的测试继承.
  2. 当我将这些测试作为套件的一部分而不是单独运行(我们经常这样做)时,多次调用@BeforeClass@AfterClass调用,减慢测试速度 - 我们真的应该只调用一次

我想要做的是以某种方式将当前的BeforeClass/AfterClass逻辑移出继承链,并将其转换为可以由单个测试和整个套件共享的内容.

可以这样做吗?如果是这样,怎么样? (如果重要的话,我正在使用JUnit 4.7,更新到不同版本可能很难卖)

java junit unit-testing junit4

26
推荐指数
1
解决办法
1万
查看次数

为什么订单在捕获异常时很重要?

我不得不用一些代码回答这个问题:

假设我编写了以下方法规范:
public void manipulateData ( ) throws java.sql.SQLException, java.sql.SQLDataException

您正在编写将使用此方法的数据库程序的代码,并且您希望专门处理每个方法.try/catch子句应该是什么样的?
您可以使用no-ops-- empty blocks {} - 用于catch子句内容.
我们只对这里语句的语法和结构感兴趣.

我回答说:

try {

} catch(java.sql.SQLException e) {

}
catch(java.sql.SQLDataException e) {

}
Run Code Online (Sandbox Code Playgroud)

由于这个原因,他没有接受答案:

"你的捕获条款的顺序是错误的.你能解释为什么这个命令很重要吗?"

他的答案是否正确?

java exception-handling

24
推荐指数
5
解决办法
1万
查看次数

ruby是否有一个列表类型,可以将内容排序为添加/删除?

我需要Ruby中的数据结构,它可以在添加或删除元素时对其元素进行排序,并允许(至少)从列表中弹出第一个元素.

我在ruby文档中找到的最接近的东西是SortedSet.但是,这似乎没有提供任何方式来通过索引访问元素(甚至关闭第一个元素)

这些是我需要的具体操作:

  • 将对象添加到列表中
  • 弹出列表中的第一个对象
  • 检查对象是否在列表中
  • 从列表中删除对象(按对象,而不是按索引)

ruby有没有内置的东西,或者是否有任何我能抓到的图书馆可以给我?我可以毫不费力地实现一个,但如果可能的话,我宁愿使用预先存在的一个.

目前我正在使用Ruby 1.8,虽然切换到1.9可能没问题.

编辑:

由于似乎存在一些混淆,我需要的排序不是插入对象的顺序.我需要根据<=>运营商进行排序.通常我会弹出第一个元素,处理它(可能生成新元素),向列表中添加新元素,然后重复.添加的元素最终可能会在排序顺序中的任何位置结束,而不仅仅是在最后.

ruby sortedlist

10
推荐指数
1
解决办法
4819
查看次数

块和ARC - 使用发布版本复制或崩溃(由优化级别引起)

我正在使用Xcode 4.3.3并开发iOS 5.0+.在开发ARC iOS应用程序时,我开始使用块作为异步操作的回调机制.该应用程序在模拟器和设备上运行良好.

然后我第一次运行了它的探查器,它几乎马上就开始崩溃 - 特别是在尝试调用第一个回调块时的EXC_BAD_ACCESS.

经过一番调查后,很明显行为上的差异是因为默认情况下探查器以"发布模式"运行 - 特别是,优化级别设置为"最快,最小[-Os]"而不是"无[-O0] ".

例如,尝试执行callbackBlock时,以下代码(此问题已简化)将崩溃:

- (void) setCallbackBlock:(void (^)(NSString *input))block
{
    callbackBlock = block;
}

- (void) invokeCallbackWithInput:(NSString *)input
{
    if (callbackBlock) {
        callbackBlock(input);
    }
}
Run Code Online (Sandbox Code Playgroud)

调试它,调用setCallbackBlock,优化级别设置为"None",传入的块将是一个NSStackBlock,并且callbackBlock将成为一个NSMallocBlock.

然而,随着优化级别"最快,最小",它仍然是一个NSStackBlock.

更改setter代码以使用[block copy]修复崩溃问题(基于iOS 5块仅使用Release Build崩溃).

但是,另一个相关问题表明,ARC 不需要这样做 - 块变量被复制到ARC中的堆中 - 为什么Objective-C块仍然可以在不将其复制到堆中的情况下工作?

所以我的问题是:这里发生了什么,为什么?(另外,这两个答案如何才能正确......?)

编辑:澄清如何声明callbackBlock - 就在我的@implementation之上,这些方法是这样的:

@interface MyClass ()
{
    void (^callbackBlock)(NSString *input);
}

@end
Run Code Online (Sandbox Code Playgroud)

objective-c ios objective-c-blocks automatic-ref-counting

10
推荐指数
1
解决办法
4183
查看次数