首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Rollback(false)不工作

@Rollback(false)不工作
EN

Stack Overflow用户
提问于 2013-10-02 04:47:46
回答 1查看 391关注 0票数 0

我有下面的测试用例。我对@Rollback(假)有异议。它不起作用。但是junit运转得很好。我在用mongodb。

我试着调试代码,我可以在数据库中调试数据。但是,在单元测试用例完成后,数据不会持久化在db中。

代码语言:javascript
复制
public class CustomerRepositoryIntegrationTest extends AbstractIntegrationTest {

@Autowired
CustomerRepository repository;

@Test
@Rollback(false)
public void savesCustomerCorrectly() {

    EmailAddress email = new EmailAddress("alicia@keys.com");

    Customer dave = new Customer("Alicia", "Keys");
    dave.setEmailAddress(email);
    dave.add(new Address("27 Broadway", "New York", "United States"));

    Customer result = repository.save(dave);
    assertThat(result.getId(), is(notNullValue()));
}

另一类是:

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { ApplicationConfig.class })
public abstract class AbstractIntegrationTest {

@Autowired
Mongo mongo;

@Before
public void setUp() {

    DB database = mongo.getDB("e-store");

    // Customers

    DBCollection customers = database.getCollection("customer");
    customers.remove(new BasicDBObject());

    BasicDBObject address = new BasicDBObject();
    address.put("city", "New York");
    address.put("street", "Broadway");
    address.put("country", "United States");

    BasicDBList addresses = new BasicDBList();
    addresses.add(address);

    DBObject dave = new BasicDBObject("firstname", "Dave");
    dave.put("lastname", "Matthews");
    dave.put("email", "dave@dmband.com");
    dave.put("addresses", addresses);

    customers.insert(dave);

    // Products

    DBCollection products = database.getCollection("product");
    products.drop();

    DBObject iPad = new BasicDBObject("name", "iPad");
    iPad.put("description", "Apple tablet device");
    iPad.put("price", 499.0);
    iPad.put("attributes", new BasicDBObject("connector", "plug"));

    DBObject macBook = new BasicDBObject("name", "MacBook Pro");
    macBook.put("description", "Apple notebook");
    macBook.put("price", 1299.0);

    BasicDBObject dock = new BasicDBObject("name", "Dock");
    dock.put("description", "Dock for iPhone/iPad");
    dock.put("price", 49.0);
    dock.put("attributes", new BasicDBObject("connector", "plug"));

    products.insert(iPad, macBook, dock);

    // Orders

    DBCollection orders = database.getCollection("order");
    orders.drop();

    // Line items

    DBObject iPadLineItem = new BasicDBObject("product", iPad);
    iPadLineItem.put("amount", 2);

    DBObject macBookLineItem = new BasicDBObject("product", macBook);
    macBookLineItem.put("amount", 1);

    BasicDBList lineItems = new BasicDBList();
    lineItems.add(iPadLineItem);
    lineItems.add(macBookLineItem);

    DBObject order = new BasicDBObject("customer", new DBRef(database,                "customer", dave.get("_id")));
    order.put("lineItems", lineItems);
    order.put("shippingAddress", address);

    orders.insert(order);
}
}

任何指针都会有帮助。

阿米特

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-03 13:26:54

我找到了原因..。

如果你仔细分析

代码语言:javascript
复制
@Before
public void setUp() 

在AbstractIntegrationTest类中,它在运行每个测试用例之前删除所有客户。这就是为什么即使回滚设置为false,数据也会被单元测试删除。

@Thilo --是的,mongodb支持回滚。

非常感谢你花时间研究这个问题。

你好,阿米特

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19130146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档