gpt4 book ai didi

java - 从数据库中插入、更新和删除的测试类

转载 作者:搜寻专家 更新时间:2023-10-30 20:24:37 24 4
gpt4 key购买 nike

我的类有 3 种方法:从数据库中插入、更新和删除。为了在插入测试方法中测试它,我需要使用插入方法,在我插入之后我需要删除我插入的内容,但是为了删除我应该使用我也想测试的删除方法所以它没有'我需要使用它们并测试它们,这对我来说没有意义。

希望您能理解我的问题。提前致谢!

最佳答案

您必须决定要测试什么。那是你描述的,它是一个集成测试。通过“真正的”单元测试,您只测试您的方法,而不是系统方法和数据库。

如果您想要单元测试,您有多种选择。例如,您使用接口(interface)并在语句到达数据库之前捕获它。

编辑 1 - 一种使用接口(interface)实现单元测试的可能性:

您需要一个接口(interface)来实现这些转到后端系统的方法:

public interface IDatabase{

public returnValue insert(yourParam);

public int update(yourParam);

}

然后用类中的实际函数实现您的方法:

public class Database implements IDatabase {

@Override
public returnValue insert(yourParam) {
// do something
return null;
}

@Override
public int update(yourParam){
// do something
return 0;
}
}

你在主类中调用的这个类:

/**
* The real class to do what you want to do.
*/
public class RealClass {

private IDatabase dbInstance = null;

private IDatabase getDbInstance() {
if (dbInstance == null) {
dbInstance = new Database();
}
return dbInstance;
}

protected void setDbInstance(IDatabase dataBase) {
dbInstance = dataBase;
}

public static void main(String[] args) {
getDbInstance().insert(yourParam);

}
}

对于单元测试,您再次实现接口(interface):

public class UnitTest implements IDatabase {

@Override
public returnValue insert(yourParam) {
// Here can you test your statement and manipulate the return value
return null;
}

@Override
public int update(yourParam){
if (yourParam.containsValue(value1)) {
assertEquals("yourStatement", yourParam);
return 1;
}else if (yourParam.containsValue(value2)) {
assertEquals("yourStatement2", yourParam);
return 5;
}else{
assertTrue(false,"unknown Statement")
}
}

@Test
public void yourTest(){
RealClass.setDbInstance(this);
//Test something
}
}

实现起来比较费时,但有了这个,你就独立于后台系统,每次都可以在没有数据库的情况下调用单元测试。

enter image description here

关于java - 从数据库中插入、更新和删除的测试类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42070915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com