有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java mock返回mock:为域逻辑的单元测试模拟neo4j(数据库)对象

我正在单元测试由neo4j数据库支持的域逻辑和域对象。大多数测试需要模拟neo4jGraphDatabaseService、各种Nodes和各种Relationships。一些模拟方法返回这些模拟对象。例如,getReferenceNode()调用返回模拟节点,或者getSingleRelationship()调用返回其getEndNode()依次返回模拟节点的模拟关系

我关心的是返回mock的mock的数量。通常不建议这样做。这无疑会使测试设置复杂化,并导致非常脆弱的测试,因为需要模拟neo4j的许多功能层

在单元测试neo4j支持的域逻辑时,有没有办法避免这种情况


共 (2) 个答案

  1. # 1 楼答案

    您可以尝试使用一个每次创建/刷新的临时数据库。如果您需要采样数据,您可以:

    1. 或者有一个用数据填充新数据库的装置
    2. 每次运行测试时都要使用测试数据库设置(在这种情况下,您必须找到一种方法来回滚更改或始终从已知状态开始)
  2. # 2 楼答案

    我正在使用Maven、Spring数据源,并使用无常图形数据库对我的应用程序进行单元测试。 因为设置起来很难,所以我做了如下工作:

    在我的应用程序上下文中。xml I初始化了graphDatabaseService:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                 http://www.springframework.org/schema/data/neo4j http://www.springframework.org/schema/data/neo4j/spring-neo4j-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
        default-lazy-init="true">
    
    
        <neo4j:config graphDatabaseService="graphDatabaseService"/>
        <!   use in memory graph database  >
        <bean id="graphDatabaseService" class="org.neo4j.test.ImpermanentGraphDatabase"/>
    
    </beans>
    

    在我的pom里。xml我必须添加内核测试:

        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j-kernel</artifactId>
            <version>1.6</version>
            <classifier>tests</classifier>
            <scope>test</scope>
        </dependency>
    

    否则,无常图形数据库将不可用

    最后,我可以使用干净的图形数据库evrytime:

    public class MyNeo4JTest extends TestCase {
    
        protected ApplicationContext ctx;
        protected GraphDatabaseService gds;
    
        @Before
        public void setUp() throws Exception {
    
            // test-data
            ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
            gds = ctx.getBean(GraphDatabaseService.class);
        }
    
        @Test
        public void testUser () {
              ...
        }
    }
    

    我发现设置比使用常规方法快得多。把一切都记在记忆里似乎会有回报