feat: 新增仅用于单元测试的日志输出.

This commit is contained in:
2025-04-23 08:50:25 +08:00
parent 961a496465
commit d533061410
5 changed files with 49 additions and 13 deletions

View File

@@ -21,5 +21,13 @@
<version>4.13.2</version> <version>4.13.2</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- 日志输出 (仅用于测试) -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.13</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@@ -6,9 +6,12 @@ import com.serliunx.statemanagement.machine.StateMachineBuilder;
import com.serliunx.statemanagement.support.PrinterEvent; import com.serliunx.statemanagement.support.PrinterEvent;
import com.serliunx.statemanagement.support.PrinterState; import com.serliunx.statemanagement.support.PrinterState;
import org.junit.Test; import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/** /**
* 状态机测试 * 状态机测试
@@ -19,6 +22,8 @@ import java.util.concurrent.Executors;
*/ */
public class MachineTest { public class MachineTest {
private static final Logger log = LoggerFactory.getLogger(MachineTest.class);
private final ExecutorService executor = Executors.newFixedThreadPool(5); private final ExecutorService executor = Executors.newFixedThreadPool(5);
@Test @Test
@@ -29,15 +34,15 @@ public class MachineTest {
.withInitial(PrinterState.STOPPING) .withInitial(PrinterState.STOPPING)
.build(); .build();
System.out.println(stateMachine.current()); log.info("{}", stateMachine.current());
} }
@Test @Test
public void testConcurrentStateMachine() throws Exception { public void testConcurrentStateMachine() throws Exception {
ConcurrentStateMachine<PrinterState> stateMachine = StateMachineBuilder.from(PrinterState.values()) ConcurrentStateMachine<PrinterState> stateMachine = StateMachineBuilder.from(PrinterState.values())
.async() .async(false)
.whenEntry(PrinterState.STOPPING, h -> { .whenEntry(PrinterState.STOPPING, h -> {
System.out.println(1111); log.info("enter stopping~");
}) })
.whenHappened(PrinterEvent.TURN_OFF, l -> { .whenHappened(PrinterEvent.TURN_OFF, l -> {
if (l.switchTo(PrinterState.STOPPING)) if (l.switchTo(PrinterState.STOPPING))
@@ -47,8 +52,7 @@ public class MachineTest {
.concurrent() .concurrent()
.build(); .build();
// stateMachine.publish(PrinterEvent.TURN_OFF); log.info("{}", stateMachine.current());
System.out.println(stateMachine.current());
stateMachine.close(); stateMachine.close();
} }
@@ -58,15 +62,16 @@ public class MachineTest {
.async(false) .async(false)
.concurrent() .concurrent()
.whenEntry(PrinterState.STOPPING, h -> { .whenEntry(PrinterState.STOPPING, h -> {
System.out.println("entering stopping..."); log.info("stopping...");
}) })
.build(); .build();
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
executor.execute(() -> { executor.execute(() -> {
System.out.println(stateMachine.compareAndSet(PrinterState.IDLE, PrinterState.STOPPING, true)); log.info("{}", stateMachine.compareAndSet(PrinterState.IDLE, PrinterState.STOPPING, true));
}); });
} }
TimeUnit.SECONDS.sleep(5);
} }
} }

View File

@@ -5,6 +5,8 @@ import com.serliunx.statemanagement.manager.DefaultUnidirectionalStateManager;
import com.serliunx.statemanagement.manager.UnidirectionalStateManager; import com.serliunx.statemanagement.manager.UnidirectionalStateManager;
import com.serliunx.statemanagement.support.PrinterState; import com.serliunx.statemanagement.support.PrinterState;
import org.junit.Test; import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* 状态管理器测试 * 状态管理器测试
@@ -15,6 +17,8 @@ import org.junit.Test;
*/ */
public class ManagerTest { public class ManagerTest {
private static final Logger log = LoggerFactory.getLogger(ManagerTest.class);
@Test @Test
public void testUnidirectionalStateManager() { public void testUnidirectionalStateManager() {
UnidirectionalStateManager<PrinterState> unidirectionalStateManager = UnidirectionalStateManager<PrinterState> unidirectionalStateManager =

View File

@@ -5,6 +5,8 @@ import com.serliunx.statemanagement.machine.StateMachine;
import com.serliunx.statemanagement.machine.support.StateMachines; import com.serliunx.statemanagement.machine.support.StateMachines;
import com.serliunx.statemanagement.support.PrinterState; import com.serliunx.statemanagement.support.PrinterState;
import org.junit.Test; import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* 状态机工具类测试 * 状态机工具类测试
@@ -14,21 +16,23 @@ import org.junit.Test;
*/ */
public class StateMachinesTest { public class StateMachinesTest {
private static final Logger log = LoggerFactory.getLogger(StateMachinesTest.class);
@Test @Test
public void testConcurrentStateMachines() throws Exception { public void testConcurrentStateMachines() throws Exception {
ConcurrentStateMachine<PrinterState> machine = StateMachines.concurrentStateMachine(PrinterState.values()); ConcurrentStateMachine<PrinterState> machine = StateMachines.concurrentStateMachine(PrinterState.values());
System.out.println(machine.current()); log.info("{}", machine.current());
System.out.println(machine.switchPrevAndGet()); log.info("{}", machine.switchPrevAndGet());
System.out.println(machine.current()); log.info("{}", machine.current());
machine.close(); machine.close();
} }
@Test @Test
public void testStateMachines() throws Exception { public void testStateMachines() throws Exception {
StateMachine<PrinterState> machine = StateMachines.defaultStateMachine(PrinterState.values()); StateMachine<PrinterState> machine = StateMachines.defaultStateMachine(PrinterState.values());
System.out.println(machine.current()); log.info("{}", machine.current());
System.out.println(machine.switchNextAndGet()); log.info("{}", machine.switchPrevAndGet());
System.out.println(machine.current()); log.info("{}", machine.current());
machine.close(); machine.close();
} }
} }

View File

@@ -0,0 +1,15 @@
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%boldGreen(%d{yyyy-MM-dd HH:mm:ss(SSS)}) %magenta([%25.25thread]) %highlight([%-6level]) %boldCyan(%-36logger{32}): %msg%n
</pattern>
</encoder>
</appender>
<logger name="com.serliunx" level="DEBUG"/>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>