Skip to content
Saltar al contenido
Volver al Blog
MockBukkit: Prueba Plugins Bukkit sin Romper Nada

MockBukkit: Prueba Plugins Bukkit sin Romper Nada

Alexandru Maftei
Alexandru Maftei
@ice
Actualizado
34 vistas
Respuesta rápida:MockBukkit es un framework de mocking para Bukkit/PaperMC que permite realizar unit tests de plugins de Bukkit de forma aislada, sin necesidad de un servidor Minecraft en ejecución. Esto facilita la verificación de la lógica del plugin, como el daño a jugadores o la manipulación de inventarios.
TL;DR:MockBukkit es un framework de testing en Java que te permite hacer unit tests de plugins Bukkit y PaperMC sin ejecutar un servidor Minecraft en vivo. Simula jugadores, mundos y eventos para verificar la lógica de tu plugin de forma aislada.
GitHub · Proyecto de comunidad Minecraft

MockBukkit (MockBukkit/MockBukkit)

MockBukkit es un framework de mocking para Bukkit/PaperMC que permite hacer unit tests fácilmente en plugins de Bukkit.

Destacar en GitHub ↗
⭐ 725 estrellas💻 Java📄 MIT

Si alguna vez has intentado escribir unit tests para un plugin de Bukkit, sabes lo difícil que es: necesitas un servidor CraftBukkit en ejecución, jugadores simulados, mundos e inventarios, y la mitad de la API de Bukkit se niega a funcionar fuera de una instancia en vivo. MockBukkit existe para resolver exactamente este problema. Es un framework Java que te permite probar tus plugins de Bukkit de forma aislada, controlando cada detalle del estado del servidor, sin ejecutar un servidor Minecraft real para cada ejecución de test.

Por qué Probar Plugins de Bukkit es Más Difícil de lo que Parece

Los plugins de Bukkit están profundamente vinculados al runtime de CraftBukkit. Normalmente, si quieres verificar si tu plugin daña correctamente la armadura de un jugador cuando recibe daño, necesitarías:

  • Un servidor Bukkit en ejecución
  • Un jugador real conectado a ese servidor
  • Una forma de simular eventos de daño
  • Acceso al inventario del jugador para verificar que la durabilidad de la armadura cambió

Esa es mucha infraestructura para una sola prueba. Y si estás ejecutando un pipeline de integración continua (CI), ejecutar un servidor Minecraft para cada prueba se vuelve costoso y lento. La mayoría de desarrolladores de plugins omiten las pruebas unitarias adecuadas y simplemente confían en pruebas manuales en el juego, lo que... bueno, no es lo ideal.

MockBukkit evita todo esto.


Qué Hace MockBukkit

MockBukkit proporciona una implementación de mock completa de la API de CraftBukkit que puedes controlar completamente desde tu código de prueba. En lugar de necesitar un servidor en ejecución, creas jugadores falsos, mundos y eventos dentro de tus unit tests. Está construido sobre Mockito bajo el capó. Eso significa que se integra con frameworks de testing estándar de Java como JUnit.

El framework soporta versiones recientes de Minecraft (el último lanzamiento tiene como objetivo la versión 1.21), y está publicado en Maven Central, por lo que agregar esto a tu proyecto es directo. Con 725 estrellas en GitHub y mantenimiento activo, está bien establecido en la comunidad de desarrolladores de plugins.

Las capacidades principales incluyen plugins simulados, jugadores simulados, mundos simulados y eventos simulados - todo lo que necesitas para probar la lógica empresarial sin un servidor.


Primeros Pasos con MockBukkit

Agregando MockBukkit a tu Proyecto

MockBukkit está disponible a través de Maven Central, por lo que la configuración depende de tu herramienta de compilación.

Para Gradle:

gradle
dependencies {
 testImplementation "org.mockbukkit.mockbukkit:mockbukkit-v1.21:1.0.0"
}

Para Maven:

xml
<dependency>
 <groupId>org.mockbukkit.mockbukkit</groupId>
 <artifactId>mockbukkit-v1.21</artifactId>
 <version>1.0.0</version>
 <scope>test</scope>
</dependency>

Asegúrate de estar usando la versión que coincida con tu versión objetivo de Minecraft (el proyecto mantiene artefactos separados para diferentes versiones de servidor).

Tu Primera Prueba

Una vez agregado, puedes comenzar a escribir pruebas inmediatamente. MockBukkit te proporciona una instancia de servidor simulado que puedes configurar:

java
import static org.mockbukkit.mockbukkit.MockBukkit.*;

class MyPluginTest {
 private MockBukkit server;
 private MyPlugin plugin;

 @Before
 void setUp() {
 server = mock();
 plugin = loadPlugin(MyPlugin.class);
 }

 @Test
 void testPlayerDamageTakesArmor() {
 Player player = server.addPlayer();
 player.getInventory().setArmorContents(new ItemStack[]{...});

 // Trigger your logic
 plugin.damagePlayer(player, 10);

 // Assert the armor was damaged
 assertTrue(player.getInventory().getArmorContents()[0].getDurability() > 0);
 }
}

Ese es el patrón básico: crear un servidor simulado, cargar tu plugin, crear jugadores y mundos simulados, activar tu lógica, luego asegurar los resultados.


Características Clave de Testing: Lo que Puedes Simular

La fortaleza de MockBukkit es su cobertura de la API de Bukkit. Aquí está lo que obtienes de fábrica:

Jugadores Simulados: Crea jugadores bajo demanda, configura sus ubicaciones, inventario, permisos y salud. Simula eventos como daño, muerte o movimiento.

Mundos Simulados: Crea múltiples mundos, despierta entidades, coloca bloques - todo excepto el renderizado real. Esto es útil si tu plugin tiene lógica específica del mundo o verifica el tipo de bloque en una ubicación.

Eventos Simulados: Activa eventos de Bukkit desde tu código de prueba. Si tu plugin escucha PlayerDamageEvent, puedes disparar uno y verificar que el plugin responde correctamente. Aquí es donde viene el verdadero poder.

Plugins Simulados: Puedes cargar tu plugin en el servidor simulado y verificar que se registra correctamente, carga archivos de configuración, y se conecta a eventos como se espera.

El framework maneja las partes aburridas para que te enfoques en probar tu lógica empresarial. Y si necesitas algo que aún no está simulado, puedes recurrir al mock parcial o crear tus propios dobles de prueba.


Cuándo MockBukkit Tiene Sentido (Y Cuándo No)

MockBukkit es perfecto para probar la lógica central de tu plugin: cálculos de daño, manipulación de inventarios, verificaciones de permisos, manejo de comandos personalizados. Si la principal preocupación de tu plugin es "cuando un jugador hace X, sucede Y", MockBukkit es tu respuesta.

Tarjeta de proyecto GitHub para MockBukkit/MockBukkit
Tarjeta de proyecto GitHub para MockBukkit/MockBukkit

Pero hay límites. Si estás probando interacciones complejas con el mundo de Minecraft - como lógica de pathfinding, cálculos de iluminación o detección de colisiones - te encontrarás rápidamente con los límites de MockBukkit. Para esos casos extremos, necesitarías pruebas de integración con un servidor real.

Además, las pruebas de MockBukkit solo prueban tu código de plugin. No prueban si Bukkit mismo funciona (spoiler: funciona). Así que no lo uses para depurar si el PlayerDamageEvent de Bukkit se dispara correctamente - se disparará. Úsalo para verificar que tu plugin escuche ese evento correctamente.

Un caveat más: si tu plugin depende fuertemente de bibliotecas externas que no son fácilmente simulables, podrías pasar más tiempo resolviendo la configuración de pruebas que realmente probando. Ten eso en mente cuando decidas la cobertura de pruebas.


Trampas Comunes y Cómo Evitarlas

La mayoría de nuevos usuarios se encuentran con uno de tres problemas:

Pruebas omitidas: Si ves pruebas siendo omitidas con UnimplementedOperationException, significa que estás llamando un método de Bukkit que MockBukkit aún no ha simulado. Verifica el rastreador de problemas del proyecto - usualmente está documentado. Como solución temporal, a veces puedes usar spies de Mockito para simular parcialmente el comportamiento.

Problemas de tiempo: Bukkit usa tareas programadas y operaciones asincrónicas. En pruebas, estas se ejecutan sincronicamente por defecto, pero necesitas ser explícito sobre qué está programado vs qué se ejecuta inmediatamente. Los documentos de MockBukkit explican esto claramente.

Carga de configuración: Si tu plugin carga archivos de configuración YAML, asegúrate de que tu configuración de prueba crea esos archivos en la ubicación correcta. El servidor simulado tiene una carpeta de plugin, pero necesitas llenarla.


MockBukkit en el Panorama Más Amplio de Testing

MockBukkit no es la única herramienta para probar plugins de Bukkit. Existen otras opciones, aunque MockBukkit es la más madura y activamente mantenida.

Algunos desarrolladores omiten frameworks de testing dedicados por completo y simplemente ejecutan su plugin en una instancia local de CraftBukkit, luego prueban manualmente en el juego. Pero esto funciona para plugins pequeños, aunque no se escala y hace que la integración continua sea mucho más difícil. Si te tomas en serio la calidad del plugin, las pruebas automatizadas valen la inversión de configuración.

Otros usan las utilidades de testing de Spigot directamente, pero esas son más básicas en comparación con MockBukkit. MockBukkit abstrae mucho del código repetitivo.

Si estás compilando un plugin, deberías estar probándolo. Y si estás probándolo, MockBukkit te ahorra horas de configuración de servidor y depuración.


Próximos Pasos Prácticos

Comienza pequeño: elige una parte de la lógica de tu plugin - tal vez un manejador de comandos personalizado o una fórmula de daño - y escribe una prueba para ella usando MockBukkit. Familiarízate con cómo funciona el servidor simulado. A partir de ahí, expande tu cobertura de pruebas incrementalmente.

El repositorio GitHub del proyecto tiene ejemplos y un servidor de Discord sorprendentemente útil si te atascas. Los mantenedores responden rápidamente, y la comunidad es acogedora con principiantes.

Si estás ejecutando un servidor Bukkit, también podrías encontrar herramientas útiles como nuestro Generador de Propiedades del Servidor para gestionar la configuración de tu servidor - la misma disciplina que se aplica a las pruebas también se aplica a mantener tu configuración de servidor limpia y documentada. Y si estás buscando comportamientos de bloques específicos para tu lógica de plugin, Búsqueda de Bloques de Minecraft puede ahorrarte un viaje a la wiki.

Sobre el autor
Alexandru Maftei
Alexandru MafteiRedactor principal

Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.

¡Compártelo con tus amigos!

Preguntas Frecuentes

¿Por qué es difícil probar plugins de Bukkit sin MockBukkit?
Sin MockBukkit, se requiere un servidor Bukkit en ejecución, jugadores simulados, mundos y acceso a inventarios, lo que complica y ralentiza el proceso de testing.
¿Qué tipo de pruebas se pueden realizar con MockBukkit?
Se pueden probar escenarios como el daño a jugadores, manipulación de inventarios, verificaciones de permisos y manejo de comandos personalizados, enfocándose en la lógica central del plugin.
¿Cómo se integra MockBukkit en un proyecto?
MockBukkit está disponible en Maven Central. Se agrega mediante la dependencia de testing en el archivo de configuración de Gradle o Maven, asegurándose de seleccionar la versión compatible con la versión objetivo de Minecraft.
¿En qué casos no es adecuado usar MockBukkit?
MockBukkit no es ideal para pruebas que requieren interacciones complejas con el mundo de Minecraft, como pathfinding, cálculos de iluminación o detección de colisiones, donde se necesitan pruebas de integración.

Comentarios

Aún no hay comentarios. ¡Sé el primero en compartir tu opinión!

We use cookies to improve your experience. By continuing to use this site, you agree to our use of cookies. Read our Privacy Policy