Kafka 和 Mongo 独立核心 java 的 Junit 代码

问题描述 投票:0回答:1

我有一个核心java应用程序(独立而不是springboot)从Kafka主题读取json消息,解析json,将源字段映射到目标字段(Kafka消息中的字段A可能是mongo集合中的字段B)并将其写入mongo收藏。一切正常。

现在我想为 Kafka、mongo 和映射类编写 Junit 测试用例。

在所有论坛中,我都看到带有 springboot 和mockito 的示例。请分享核心 Java 代码的任何示例/参考。

java mongodb apache-kafka junit
1个回答
0
投票

1。测试卡夫卡

对于 Kafka,即使在非 Spring Boot 应用程序中,您也可以使用 spring-kafka-test 库中的 EmbeddedKafka 类:

import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.apache.kafka.common.serialization.StringSerializer;
import org.junit.jupiter.api.Test;
import org.springframework.kafka.test.EmbeddedKafkaBroker;
import org.springframework.kafka.test.context.EmbeddedKafka;
import org.springframework.kafka.test.utils.KafkaTestUtils;

import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertEquals;

@EmbeddedKafka(partitions = 1, topics = { "testTopic" })
public class KafkaTest {

    @Test
    public void testKafka() {
        EmbeddedKafkaBroker embeddedKafka = new EmbeddedKafkaBroker(1, true, 1, "testTopic");
        embeddedKafka.afterPropertiesSet();

        Map<String, Object> producerProps = KafkaTestUtils.producerProps(embeddedKafka);
        ProducerRecord<String, String> record = new ProducerRecord<>("testTopic", "key", "value");
        KafkaTestUtils.getKafkaProducer(producerProps).send(record);

        Map<String, Object> consumerProps = KafkaTestUtils.consumerProps("testGroup", "true", embeddedKafka);
        ConsumerRecord<String, String> received = KafkaTestUtils.getSingleRecord(
                KafkaTestUtils.getKafkaConsumer(consumerProps, new StringDeserializer(), new StringDeserializer()), "testTopic");

        assertEquals("value", received.value());
    }
}
  1. 测试 MongoDB

对于 MongoDB,您可以使用 Testcontainers 库来启动 MongoDB 实例进行测试

import org.bson.Document;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.MongoDBContainer;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class MongoTest {

    private static MongoDBContainer mongoDBContainer;
    private static MongoClient mongoClient;

    @BeforeAll
    public static void setUp() {
        mongoDBContainer = new MongoDBContainer("mongo:4.4.3");
        mongoDBContainer.start();
        mongoClient = MongoClients.create(mongoDBContainer.getReplicaSetUrl());
    }

    @AfterAll
    public static void tearDown() {
        mongoClient.close();
        mongoDBContainer.stop();
    }

    @Test
    public void testMongo() {
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("testCollection");

        Document doc = new Document("name", "testName");
        collection.insertOne(doc);

        Document retrievedDoc = collection.find().first();
        assertEquals("testName", retrievedDoc.getString("name"));
    }
}
  1. 测试映射类

对于映射类,您可以使用 JUnit 编写简单的单元测试

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class MappingTest {

    @Test
    public void testMapping() {
        Source source = new Source("fieldAValue");
        Target target = new Target();
        target.setFieldB(source.getFieldA());

        assertEquals("fieldAValue", target.getFieldB());
    }

    class Source {
        private String fieldA;

        public Source(String fieldA) {
            this.fieldA = fieldA;
        }

        public String getFieldA() {
            return fieldA;
        }
    }

    class Target {
        private String fieldB;

        public void setFieldB(String fieldB) {
            this.fieldB = fieldB;
        }

        public String getFieldB() {
            return fieldB;
        }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.