Back to Repositories

Testing StabilityAI Image Generation Integration in RuoYi Vue Pro

A comprehensive unit test suite for validating StabilityAI image generation functionality in the RuoYi Vue Pro framework. This test class demonstrates integration with the StabilityAI API for image creation and visualization capabilities.

Test Coverage Overview

The test suite covers core image generation functionality using StabilityAI’s API integration.

Key areas tested include:
  • Image generation with specific model parameters
  • Base64 image response handling
  • Custom dimension specifications
  • Visual output verification
Integration points focus on StabilityAI API authentication and response processing.

Implementation Analysis

The testing approach utilizes JUnit 5 framework with a focus on isolated API interaction testing.

Key patterns include:
  • Builder pattern for image options configuration
  • Synchronous API call handling
  • Visual verification using Swing components
  • Base64 encoding/decoding for image data transfer

Technical Details

Testing infrastructure includes:
  • JUnit 5 testing framework
  • Spring AI integration for StabilityAI
  • Hutool utilities for Base64 operations
  • Java Swing for image visualization
  • ThreadUtil for execution control

Best Practices Demonstrated

The test implementation showcases several quality testing practices:

  • Proper test isolation and setup
  • Clear test method naming conventions
  • Comprehensive API interaction validation
  • Visual output verification capabilities
  • Flexible configuration management

yunaiv/ruoyi-vue-pro

yudao-module-ai/yudao-spring-boot-starter-ai/src/test/java/cn/iocoder/yudao/framework/ai/image/StabilityAiImageModelTests.java

            
package cn.iocoder.yudao.framework.ai.image;

import cn.hutool.core.codec.Base64;
import cn.hutool.core.thread.ThreadUtil;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.ai.image.ImageOptions;
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.openai.OpenAiImageOptions;
import org.springframework.ai.stabilityai.StabilityAiImageModel;
import org.springframework.ai.stabilityai.api.StabilityAiApi;

import javax.swing.*;
import java.awt.*;
import java.util.concurrent.TimeUnit;

/**
 * {@link StabilityAiImageModel} 集成测试类
 *
 * @author fansili
 */
public class StabilityAiImageModelTests {

    private final StabilityAiApi imageApi = new StabilityAiApi(
            "sk-e53UqbboF8QJCscYvzJscJxJXoFcFg4iJjl1oqgE7baJETmx");
    private final StabilityAiImageModel imageModel = new StabilityAiImageModel(imageApi);

    @Test
    @Disabled
    public void testCall() {
        // 准备参数
        ImageOptions options = OpenAiImageOptions.builder()
                .withModel("stable-diffusion-v1-6")
                .withHeight(256).withWidth(256)
                .build();
        ImagePrompt prompt = new ImagePrompt("great wall", options);

        // 方法调用
        ImageResponse response = imageModel.call(prompt);
        // 打印结果
        String b64Json = response.getResult().getOutput().getB64Json();
        System.out.println(response);
        viewImage(b64Json);
    }

    public static void viewImage(String b64Json) {
        // 创建一个 JFrame
        JFrame frame = new JFrame("Byte Image Display");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);

        // 创建一个 JLabel 来显示图片
        byte[] imageBytes = Base64.decode(b64Json);
        JLabel label = new JLabel(new ImageIcon(imageBytes));

        // 将 JLabel 添加到 JFrame
        frame.getContentPane().add(label, BorderLayout.CENTER);

        // 显示 JFrame
        frame.setVisible(true);
        ThreadUtil.sleep(1, TimeUnit.HOURS);
    }

}