Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mkdir()文件夹,您可以在其中';t创建子文件夹或文件(抛出访问被拒绝)_Java_Spring Boot_Testing_Junit - Fatal编程技术网

Java mkdir()文件夹,您可以在其中';t创建子文件夹或文件(抛出访问被拒绝)

Java mkdir()文件夹,您可以在其中';t创建子文件夹或文件(抛出访问被拒绝),java,spring-boot,testing,junit,Java,Spring Boot,Testing,Junit,我们希望在我们运行的Spring Boot Java程序上增加100%的覆盖率,因此有2个 奇怪的测试要求我们创建一个文件夹和一个具有访问权限的文件 拒绝许可 因为这个文件非常直截了当: File file = new file(....path...); .... just creating the file with some simple code... //now deny permissions file.setReadable(false); file.setWritable(fal

我们希望在我们运行的Spring Boot Java程序上增加100%的覆盖率,因此有2个 奇怪的测试要求我们创建一个文件夹和一个具有访问权限的文件 拒绝许可

因为这个文件非常直截了当:

File file = new file(....path...);
.... just creating the file with some simple code...
//now deny permissions
file.setReadable(false);
file.setWritable(false);

//Some code trying to write on that file
throwing exception (happy junit test is passed)
但是我想创建一个目录,让我们把它命名为
parentDir
,使同一个java程序无法在其中创建文件或文件夹。因此,在相同的逻辑中

File parentDir= new file(....parentDirPath...);
parentDir.mkDir();
parentDir.setReadable(false);
parentDir.setWritable(false);

//Some code to create another folder inside the parentDir
File childDir= new file(....parentDirPath/childDir...);
directoryExistsOrElseCreate(childDir.toPath());

//WHOT IT CREATES THE FOLDER even if i don't want ...
为什么它仍然能够在
parentDir
上创建新的文件和文件夹


更新,只是深入代码,发现我们正在使用
Files.createDirectories(path)
而不是
file.mkDir()

我正在测试的方法如下:

public void directoryExistsOrElseCreate(final Path path) {

    try {
        if (Files.notExists(path)) {
            log.warn("Directory={} does NOT EXIST, creating...", path);
            Files.createDirectories(path);
        } else {
            log.warn("Directory={} ALREADY EXISTS, skipping...", path);
        }
    } catch (final IOException e) {
        log.error("Error during creating directory: path={}, error={}", path.toString(), e.getMessage());
        throw new AtsGenericException(AtsGenericErrorCode.IO_ERROR, new Object[]{e.getMessage()});
    }
}

根据,在您的场景中,
mkdir()
应该返回
false
,而不是抛出异常

根据,在您的场景中,
mkdir()
应该返回
false
,而不是抛出异常

我只有一个答案:不要把精力浪费在100%的代码覆盖率上。在很多情况下,这不值得付出努力,从而浪费时间和金钱。此外,涉及难以测试的内容的复杂测试,如私有构造函数、实用程序类的异常或与系统的直接交互(文件、网络等),很难理解和维护。它们只会增加应用程序的技术债务,而不会增加任何价值

也不要为贫血模型类编写单独的单元测试(例如,只有字段、getter和setter且没有逻辑的POJO)。这些类别应在其他地方使用,并作为其他测试的一部分涵盖

将目标设定在60-80%范围内,并将测试编写工作重点放在业务和转换逻辑上,例如控制器、映射器和服务。这是一种难以理解的逻辑,最常更改,并决定应用程序的功能


要覆盖任何未覆盖代码中的错误配置或bug,请使用存根环境组件(如H2数据库)或带有固定响应的WireMock端点编写一些基本集成(端到端)测试。如果您的系统无法在一个基本级别上进行交互,那么这些将比任何捏造的充满反射的单元测试都要好得多。

我只有一个答案:不要浪费精力获得100%的代码覆盖率。在很多情况下,这不值得付出努力,从而浪费时间和金钱。此外,涉及难以测试的内容的复杂测试,如私有构造函数、实用程序类的异常或与系统的直接交互(文件、网络等),很难理解和维护。它们只会增加应用程序的技术债务,而不会增加任何价值

也不要为贫血模型类编写单独的单元测试(例如,只有字段、getter和setter且没有逻辑的POJO)。这些类别应在其他地方使用,并作为其他测试的一部分涵盖

将目标设定在60-80%范围内,并将测试编写工作重点放在业务和转换逻辑上,例如控制器、映射器和服务。这是一种难以理解的逻辑,最常更改,并决定应用程序的功能


要覆盖任何未覆盖代码中的错误配置或bug,请使用存根环境组件(如H2数据库)或带有固定响应的WireMock端点编写一些基本集成(端到端)测试。这些将显示您的系统是否无法在基本级别上进行交互,这比任何捏造的充满反射的单元测试要好得多。

您正在运行哪些操作系统?其他代码是否以管理员身份运行?@PeterLawrey Hello Peter:)
使用Windows 10,以管理员身份运行。但是,代码应该是平台独立的。请尝试不以管理员身份运行。实际上,您使用的代码不是平台独立的。在封面下方
文件
使用
文件系统
实现,在您的情况下,它很可能最终调用Win32函数;与
文件相同
()。不能保证像
setReadable()
setWritable()
这样的方法在所有平台上都能产生相同的结果。您的代码设置的确切Windows权限是什么?我知道,@GOXR3PLUS。但要确定根本原因,您必须查看测试创建的目录,并查看权限。问题是Windows权限比简单的读写更细粒度,因此不清楚这些方法如何映射到实际权限。您运行的是哪些操作系统?其他代码是否以管理员身份运行?@PeterLawrey Hello Peter:)
使用Windows 10,以管理员身份运行。但是,代码应该是平台独立的。请尝试不以管理员身份运行。实际上,您使用的代码不是平台独立的。在封面下方
文件
使用
文件系统
实现,在您的情况下,它很可能最终调用Win32函数;与
文件相同
()。不能保证像
setReadable()
setWritable()
这样的方法在所有平台上都能产生相同的结果。您的代码设置的确切Windows权限是什么?我知道,@GOXR3PLUS。但要确定根本原因,您必须查看测试创建的目录,并查看权限。问题是Windows权限比简单的读写权限更细粒度,因此不清楚这些方法如何映射到实际权限。我对否决票感到难过。有时,问题的答案不是同意海报的假设,而是挑战它们,提供很好的论据。你可能不同意我的观点,但我认为他们不值得投反对票