RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题

问题[junit]

Martin Hope
XelaNimed
Asked: 2022-09-30 23:14:24 +0000 UTC

在 JUnit 测试中使用身份验证数据

  • 0

有一个使用 Maven 插件openapi-generator-maven-plugin生成的 Maven REST API 客户端项目。测试也在 GitLab 端生成和运行。GitLab 版本 13.12.15 安装在企业内部网络的 Windows 机器上。REST API 中的身份验证由 Bearer 令牌执行,当然,在执行测试期间它必须存在。GitLab 的配置方式使得许多员工可以访问代码,并且只有管理员可以访问存储库设置。

问题:如何使用 Bearer 令牌,使其在执行测试期间可用,但同时它不以开放形式出现在代码中?


有一个想法为此使用GitLab CI / CD 变量,因为在变量设置中您可以指定需要在日志中隐藏变量的值,但是如何在 JUnit 测试中传递/使用这个值?

java junit
  • 1 个回答
  • 12 Views
Martin Hope
Tural
Asked: 2022-08-16 18:42:27 +0000 UTC

@BeforeAll,@BeforeEach 注释不起作用

  • 0

大家好,我刚开始学习Junit,现在遇到一个问题。写了一个简单的测试:

public class MainTests {

private List<Employee> employeeList;

@BeforeAll
public void sayHello(){
    System.out.println("hello");
}

@BeforeEach
public void listInit() {
    employeeList = new ArrayList<>();
    employeeList.add(new Employee(1, "John", "Smith", "USA", 25));
    employeeList.add(new Employee(2, "Ivan", "Petrov", "RU", 23));
}

@Test
public void parseCsv() {
    String fileName = "data.csv";
    String[] columnMapping = new String[]{"id", "firstName", "lastName", "country", "age"};
    List<Employee> list = Main.parseCSV(columnMapping, fileName);

    Assert.assertEquals(employeeList, list);

}

据我了解,我用 BeforeAll 注释标记的方法应该在所有测试开始之前工作一次(这根本不会发生)。另外,带有BeforeEach注解的方法必须在每次测试之前工作(这也根本不会发生)。不要告诉我为什么这些注解没有被处理?我的pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.guluev</groupId>
    <artifactId>CsvJsonParser</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>


        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>5.6</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>


    </dependencies>
</project>
java junit
  • 1 个回答
  • 110 Views
Martin Hope
Vitaliy
Asked: 2022-07-07 00:11:09 +0000 UTC

“pom.xml”在 pom.xml 文件中有语法错误[关闭]

  • -2
关闭 这个问题是题外话。目前不接受回复。

4 个月前关闭。

  • 该问题是由不再复制的问题或错字引起的。虽然类似的问题可能与本网站相关,但该问题的解决方案不太可能帮助未来的访问者。通常可以通过在发布问题之前编写和研究一个最小程序来重现问题来避免此类问题。
  • 寻求调试帮助的问题(“为什么这段代码不起作用? ”)应该包括期望的行为、具体的问题或错误,以及在问题中重现它的最少代码。没有明确描述问题的问题对其他访问者毫无用处。请参阅如何创建一个最小的、独立的和可重现的示例。
改进问题

我正在尝试为我的项目安装 jUnit 5 以在 Jenkins 上进行自动测试。为此,我将以下代码添加到 pom.xml 文件中:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.21</version>
            <configuration>
                <testFailureIgnore>false</testFailureIgnore>
                <argLine>
                    -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                </argLine>
                <systemProperties>
                    <property>
                        <name>junit.jupiter.extensions.autodetection.enabled</name>
                        <value>true</value>
                    </property>
                </systemProperties>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.junit.platform</groupId>
                    <artifactId>junit-platform-surefire-provider</artifactId>
                    <version>1.2.0</version>
                </dependency>
                <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>${aspectj.version}</version>
                <dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>io.qameta.allure</groupId>
            <artifactId>allure-maven</artifactId>
            <version>LATEST_VERSION</version>
            <configuration>
                <reportVersion>2.4.1</reportVersion>
            </configuration>
        </plugin>
    </plugins>
</build>

所有有错误的插件 在此处输入图像描述

请帮我弄清楚并修复错误。非常类似于版本错误。

java junit
  • 1 个回答
  • 88 Views
Martin Hope
unkn0wn
Asked: 2022-03-11 18:20:11 +0000 UTC

为什么 JUnit 5 以随机顺序运行测试?

  • 0

我正在使用JUnit 5和H2数据库进行测试。从逻辑上讲,JUnit是单元测试,所以测试方法不应该相互依赖。另外,JUnit 以随机顺序运行测试方法。

然后出现了一个悖论。如果通过某种方法从数据库中删除了一条记录,而在另一种方法中将访问该记录,该记录已被删除,该怎么办?

我举个例子。一种方法检查是否已通过 id 从数据库表中删除记录。另一种方法是通过 id 读取该条目。

如果你设置了测试执行的顺序,那么这不再是单元测试,因为。一种测试方法依赖于另一种测试方法。

更新 1
感谢用户@andreymal 的评论

您可以在测试类上声明注释:

import org.springframework.test.annotation.DirtiesContext;

@Sql(scripts = "classpath:db/schema.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
@Sql(scripts = "classpath:db/data.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD)
junit
  • 1 个回答
  • 10 Views
Martin Hope
Alex
Asked: 2022-06-06 18:43:01 +0000 UTC

Mockito 不模拟方法(需要但未调用)

  • 0

大家好。有这个类:

public class Class_A {


public String method1(String str1){
    try {

        return Class_B.calc(str1);

    } catch (Exception e) {
        // вот здесь  e.getMessage() = "Ошибка сервиса"
        throw new MyException(e.getMessage(), e);
    }

}


public boolean method2(String str1, String str2){

    return method1(str1).equals(str2);
}


public void throwMyExceptionIfNoUser(String str1, String str2) throw MyException {
    if (!method2(st1, str2)) {
        throw new MyException(String.format("Отсутвует пользователь %s", str1));
    }
}

}

有这个测试:

    @ExtendWith(MockitoExtension.class)

@RunWith(JUnitPlatform.class) //@MockitoSettings(strictness = Strictness.LENIENT)

类 Class_ATest {

@org.junit.jupiter.api.BeforeEach
void setUp() {
}

@org.junit.jupiter.api.AfterEach
void tearDown() {
}


/**
 * этот тест возвращает вот это
 *
 * java.lang.NullPointerException
 * at ua.avk.junit.Class_A.method1(Class_A.java:9)
 *
 */
@org.junit.jupiter.api.Test
void throwMyExceptionIfNoUser_v1() {
    String str1 = "str1";
    String str2 = "str2";

    Class_A  classA = Mockito.spy(new Class_A());

    Assertions.assertNotNull(classA);

    Mockito.when(classA.method2(str1, str2)).thenReturn(false);
    //Mockito.doReturn(false).when(classA).method2(str1, str2);

    MyException myException = Assertions.assertThrows(
            MyException.class,
            () -> { throw new MyException(String.format("Отсутвует пользователь %s", str2)); }
    );

    //Mockito.verify(classA).hasRole(str1, str2);

    //String exp = String.format("Ошибка сервиса Отсутвует пользователь %s", str2);
    String exp = String.format("Отсутвует пользователь %s", str2);
    String act = myException.getMessage();

    Assertions.assertEquals(exp, act);
}



/**
 * этот тест возвращает вот это
 *
 *
 * Wanted but not invoked:
 * classA.method2(
 * "str1",
 * "str2"
 * );
 * -> at ua.avk.junit.Class_ATest.throwMyExceptionIfNoUser_v2(Class_ATest.java:73)
 * Actually, there were zero interactions with this mock.
 *
 * Но если убрать проверку Mockito.verify то он возвращвет  "Ошибка сервисa Отсутвует пользователь %s", str2"
 * Получается что он не мокает method2
 */
@org.junit.jupiter.api.Test
void throwMyExceptionIfNoUser_v2() {
    String str1 = "str1";
    String str2 = "str2";

    Class_A  classA = Mockito.mock(Class_A.class);

    Assertions.assertNotNull(classA);

    Mockito.when(classA.method2(str1, str2)).thenReturn(false);

    MyException myException = Assertions.assertThrows(
            MyException.class,
            () -> { throw new MyException(String.format("Отсутвует пользователь %s", str2)); }
    );

    Mockito.verify(classA).hasRole(str1, str2);

    //String exp = String.format("Ошибка сервисa Отсутвует пользователь %s", str2);
    String exp = String.format("Отсутвует пользователь %s", str2);
    String act = myException.getMessage();

    Assertions.assertEquals(exp, act);

}

}

我使用这些依赖项:

        <jupiter.version>5.7.0</jupiter.version>
    <junit-platform.version>1.7.2</junit-platform.version>
    <mockito.jupiter.version>3.7.7</mockito.jupiter.version>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${jupiter.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.junit.vintage</groupId>
        <artifactId>junit-vintage-engine</artifactId>
        <version>${jupiter.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${jupiter.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-runner</artifactId>
        <version>${junit-platform.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>${mockito.jupiter.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-junit-jupiter</artifactId>
        <version>${mockito.jupiter.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.powermock</groupId>
        <artifactId>powermock-api-mockito2</artifactId>
        <version>2.0.9</version>
        <scope>test</scope>
    </dependency>

测试结果在测试的注释中给出。 事实证明,mockito 没有模拟任何东西!?为什么???或者,也许,我没有正确理解模拟如何工作的技术???

请帮我解决模拟问题,我已经铲了一堆码头(在stackOverflow上->也是),但是,不幸的是,我没有找到一个可理解的答案......提前谢谢你的回答。

junit
  • 1 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5