小编Dav*_*ave的帖子

在测试类弄脏之后,如何重置Spring JUnit应用程序上下文?

我正在使用Spring 3.1.1.RELEASE,JUnit 4.8.1和HSQL 2.7.7内存数据库.我有一个注释为的测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-trainingSessionServiceContext.xml" })
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
public class TrainingSessionServiceTest  
{
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行"mvn clean test"时,似乎所有测试类在上述类失败后运行,因为内存数据库被销毁而不是重新创建.我得到的错误就像

org.hibernate.exception.SQLGrammarException: user lacks privilege or object not found: CB_ORGANIZATION" type="javax.persistence.PersistenceException">javax.persistence.PersistenceException:   org.hibernate.exception.SQLGrammarException: user lacks privilege or object not found: CB_ORGANIZATION
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1360)
    at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:817)
    at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:771)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
    at $Proxy46.find(Unknown Source)
    at org.mainco.subco.organization.repo.OrganizationDaoImpl.findById(OrganizationDaoImpl.java:77)
    at org.mainco.subco.pd.repo.LinkDaoTest.createDummyLink(LinkDaoTest.java:686)
    at org.mainco.subco.pd.repo.LinkDaoTest.testSaveLink(LinkDaoTest.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
Run Code Online (Sandbox Code Playgroud)

以下是我如何设置测试类(在上面的类之后运行),它给出了例外...

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-context.xml" …
Run Code Online (Sandbox Code Playgroud)

junit spring hsqldb applicationcontext

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

使用Mockito,如何验证方法是否具有某个参数?

我正在使用Mockito 1.9.0.我如何验证一个方法只被调用一次,并且传递给它的一个字段包含一定的值?在我的JUnit测试中,我有

@Before
public void setupMainProg() { 
    // Initialize m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc
    ...
    m_prog = new ProcessOrdersWorker(m_orderSvc, m_opportunitySvc, m_myprojectOrgSvc);
}   // setupMainProg

@Test
public void testItAll() throws GeneralSecurityException, IOException { 
    m_prog.work();  
}
Run Code Online (Sandbox Code Playgroud)

方法"work"调用"m_orderSvc"方法(传递给对象的参数之一)."m_orderSvc"又包含一个成员字段"m_contractsDao".我想验证"m_contractsDao.save"只被调用一次,并且传递给它的参数包含一个特定值.

这可能有点令人困惑.让我知道如何澄清我的问题,我很高兴这样做.

java mocking mockito

52
推荐指数
3
解决办法
10万
查看次数

如何防止Maven每次都下载工件?

我正在使用Maven 3.1.1.在我的一个项目中,我引用了我的另一个项目......

    <dependencies>
            <dependency>
                    <groupId>org.mainco.subco</groupId>
                    <artifactId>myprojectA</artifactId>
                    <version>${project.version}</version>
            </dependency>
Run Code Online (Sandbox Code Playgroud)

以上内容取决于我的其他几个项目.但是,当我运行"mvn clean install"时,Maven会尝试下载这些工件而不是仅仅使用我本地存储库中的内容.如果我的本地存储库中不存在Maven,我如何让它只下载?这是我所看到的输出......

davea$ mvn clean install
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building subco admin Module 57.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://download.java.net/maven/2/org/mainco/subco/myprojectA/57.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/subco/57.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/projectB/57.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://download.java.net/maven/2/org/mainco/subco/projectC/57.0.0-SNAPSHOT/maven-metadata.xml
[INFO]
Run Code Online (Sandbox Code Playgroud)

dependencies dependency-management maven-3 maven

44
推荐指数
3
解决办法
6万
查看次数

如果我们有足够的处理器来服务所有线程,那么Thread.yield()会做任何事情吗?

如果我们在具有两个处理器的机器上有两个正在运行的线程,并且Thread.yield()在其中一个线程中调用,那么是否有理由不做任何事情(调度程序实际上会忽略请求),因为我们有足够的处理器来服务正在运行的线程?

java concurrency multithreading thread-synchronization java-threads

39
推荐指数
3
解决办法
1255
查看次数

如果指定了"-DskipTests"或"-Dmaven.test.skip = true",如何跳过Maven插件执行?

我正在使用Maven 3.0.3.我有这个插件,通常我想在执行JUnit测试之前运行它:

    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <test.mysql.db.user>sbjunituser</test.mysql.db.user>
            <test.mysql.db.password></test.mysql.db.password>
            <test.mysql.db.prefix>sbjunit</test.mysql.db.prefix>
            <test.mysql.db.sid>${test.mysql.db.prefix}_${project.artifactId}</test.mysql.db.sid>
            <test.mysql.db.host>localhost</test.mysql.db.host>
            <test.mysql.db.port>3306</test.mysql.db.port>
            <test.mysql.dataSource.url>jdbc:mysql://${test.mysql.db.host}:${test.mysql.db.port}/${test.mysql.db.sid}</test.mysql.dataSource.url>
            <test.mysql.dataSource.driverClassName>com.mysql.jdbc.Driver</test.mysql.dataSource.driverClassName>
        </properties>
        <build>
            <plugins>
        <!--  Run the liquibase scripts -->
        <plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>2.0.1</version>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.18</version>
                </dependency>
            </dependencies>
            <executions>
                <execution>
                    <id>build-database</id>
                    <phase>process-test-classes</phase>
                    <configuration>
                        <driver>com.mysql.jdbc.Driver</driver>
                        <url>jdbc:mysql://${test.mysql.db.host}:${test.mysql.db.port}/${test.mysql.db.sid}</url>
                        <username>${test.mysql.db.user}</username>
                        <password>${test.mysql.db.password}</password>
                        <changeLogFile>${project.build.directory}/db.changelog-master.xml</changeLogFile>
                        <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                    </configuration>
                    <goals>
                        <goal>update</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

但是,如果有人指定-Dmaven.test.skip=true或者-DskipTests,我想跳过这个插件来运行.我怎么做?我尝试将执行阶段更改为"test",但之后我的单元测试在此插件之前运行,这不是我想要的.

testing plugins automated-tests maven

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

开玩笑,如何使用“toHaveBeenCalledWith”并仅匹配数组参数中对象的一部分?

我正在使用 Typescript 和 Jest。在开玩笑中,如果我想检查我的函数是否被调用,我可以运行

expect(myMockFn).toHaveBeenCalledWith(arrayArgument);
Run Code Online (Sandbox Code Playgroud)

我想检查我的函数是否是使用包含具有某些值的对象的数组参数调用的。例如,

expect(myMockFn).toHaveBeenCalledWith( [{x: 2, y: 3}] );
Run Code Online (Sandbox Code Playgroud)

实际的调用是使用如下所示的参数进行的

[{x: 2, y: 3, id: 'some-guid'}]
Run Code Online (Sandbox Code Playgroud)

所以我的期望失败了,因为我在数组的第一个对象中没有 id 属性,但我想匹配并忽略 ID,因为它每次都会不同,即使其他参数相同。如何使用 Jest 构建这样的 Expect 调用?

mocking jestjs ts-jest

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

导入Maven-GWT项目时出错("找不到处理gwt-maven-plugin的市场条目")

我在Win XP,Maven 3.0.3和GWT 2.4上使用Eclipse Indigo.我用.创建了一个Maven-GWT项目Mavne gwt archetype.然后我打开Eclipse,去了File -> Import,选择Existing Maven Projects了,为我的GWT-Maven项目选择了pom,然后得到了这个对话框:

在此输入图像描述

错误是

No marketplace entries found to handle gwt-maven-plugin:2.4.0:generateAsync in Eclipse.  Please see Help for more information.
No marketplace entries found to handle gwt-maven-plugin:2.4.0:i18n in Eclipse.  Please see Help for more information.
No marketplace entries found to handle maven-war-plugin:2.1.1:exploded in Eclipse.  Please see Help for more information.
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这些错误?当我实际导入我的项目并尝试使用它时,它正在肆虐. - 戴夫

eclipse gwt maven

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

合并两个地图

我有两个映射,其键是Strings,其值是Set<MyObject>.给定两个Maps,合并它们的最简单方法是什么,如果两个键相同,则值是两个集合的并集.你可以假设值是永远不能为null,如果它是有用的,我们可以把这些Map小号SortedMap秒.

java merge map

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

治愈"字符串" - "评论中不允许".例外?

我正在使用Java 6.我在我的pom中有这种依赖...

            <dependency>
                    <groupId>xerces</groupId>
                    <artifactId>xercesImpl</artifactId>
                    <version>2.10.0</version>
            </dependency>
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用此行解析XHTML文档

   <!--[if gte mso 9]><xml>  <w:WordDocument>   <w:View>Normal</w:View>   <w:Zoom>0</w:Zoom>   <w:TrackMoves/>   <w:TrackFormatting/>   <w:PunctuationKerning/>   <w:ValidateAgainstSchemas/>   <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>   <w:IgnoreMixedContent>false</w:IgnoreMixedContent>   <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>   <w:DoNotPromoteQF/>   <w:LidThemeOther>EN-US</w:LidThemeOther>   <w:LidThemeAsian>JA</w:LidThemeAsian>   <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>   <w:Compatibility>    <w:BreakWrappedTables/>    <w:SnapToGridInCell/>    <w:WrapTextWithPunct/>    <w:UseAsianBreakRules/>    <w:DontGrowAutofit/>    <w:SplitPgBreakAndParaMark/>    <w:EnableOpenTypeKerning/>    <w:DontFlipMirrorIndents/>    <w:OverrideTableStyleHps/>    <w:UseFELayout/>   </w:Compatibility>   <m:mathPr>    <m:mathFont m:val="Cambria Math"/>    <m:brkBin m:val="before"/>    <m:brkBinSub m:val="--"/>    <m:smallFrac m:val="off"/>    <m:dispDef/>    <m:lMargin m:val="0"/>    <m:rMargin m:val="0"/>    <m:defJc m:val="centerGroup"/>    <m:wrapIndent m:val="1440"/>    <m:intLim m:val="subSup"/>    <m:naryLim m:val="undOvr"/>   </m:mathPr></w:WordDocument> </xml><![endif]-->
Run Code Online (Sandbox Code Playgroud)

使用此代码...

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setValidating(false);
    factory.setExpandEntityReferences(false);
    factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    final DocumentBuilder builder = factory.newDocumentBuilder();
    final InputSource s …
Run Code Online (Sandbox Code Playgroud)

java xhtml parsing sax xerces

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

如何在每次单元测试后重置数据库状态而不将整个测试作为事务处理?

我使用的是Spring 3.1.1.RELEASE,Hibernate 4.1.0.Final,JPA 2,JUnit 4.8.1和HSQL 2.2.7.我想在我的服务方法上运行一些JUnit测试,并且在每次测试之后,我希望回滚写入内存数据库的任何数据.但是,我不希望将整个测试视为事务.例如在这个测试中

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:test-context.xml" })
public class ContractServiceTest 
{
    …

    @Autowired
    private ContractService m_contractService;

    @Test
    public void testUpdateContract()
    {
        // Add the contract
        m_contractService.save(m_contract);
        Assert.assertNotNull(m_contract.getId());
        // Update the activation date by 6 months.
        final Calendar activationDate = Calendar.getInstance();
        activationDate.setTime(activationDate.getTime());
        activationDate.add(Calendar.MONTH, 6);
        m_contract.setActivationDate(activationDate.getTime());
        m_contractService.save(m_contract);
        final List<Contract> foundContracts = m_contractService.findContractByOppId(m_contract.getOpportunityId());
        Assert.assertEquals(foundContracts.get(0), m_contract);
    }   // testUpdateContract
Run Code Online (Sandbox Code Playgroud)

有三个服务调用("m_contractService.save","m_contractService.save"和"m_contractService.findContractByOppId"),每个调用都被视为一个事务,我想要它.但我不知道在每次单元测试后如何将内存数据库重置为其原始状态.

如果我需要提供其他信息,请与我们联系.

junit spring transactions hsqldb

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