下载地址:

解压配置环境变量
SBT_HOME

PATH


-Xmx512M
-XX:MaxPermSize=256m
-XX:ReservedCodeCacheSize=128m
-Dsbt.log.format=true
-Dsbt.override.build.repos=true
-Dconsold.encoding=UTF-8
-Dsbt.log.format=true
-Dsbt.ivy.home=D:\Environment\sbt\.ivy
-Dsbt.boot.directory=D:\Environment\sbt\boot
-Dsbt.global.base=D:\Environment\sbt\.sbt
-Dsbt.repository.config=D:\Environment\sbt\conf\repo.properties # 仓库镜像配置

[repositories]
local
huaweicloud-maven: https://repo.huaweicloud.com/repository/maven/
maven-central: https://repo1.maven.org/maven2/
sbt-plugin-repo: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]






# 打包构建的版本
ThisBuild / version := "0.1.0-SNAPSHOT"
# scala的版本
ThisBuild / scalaVersion := "2.11.7"
// 依赖
libraryDependencies ++= Seq("com.typesafe.akka" %% "akka-actor" % "2.3.3","com.typesafe.akka" %% "akka-testkit" % "2.3.6" % "test","org.scalatest" %% "scalatest" % "2.1.6" % "test"
)# 主入口
lazy val root = (project in file(".")).settings(name := "ActorDemo01")

org.scala-lang scala-library ${scala.version}
log4j log4j 1.2.17
com.typesafe.akka akka-actor_2.10 2.3.3
junit junit 4.13.2 test
org.testng testng RELEASE compile
/*** @description:* @author: shu* @createDate: 2022/10/27 20:17* @version: 1.0*/
public class SetRequests {private final String key;private final Object value;public SetRequests(String key, Object value) {this.key = key;this.value = value;}public String getKey() {return key;}public Object getValue() {return value;}@Overridepublic String toString() {return "SetRequests{" +"key='" + key + '\'' +", value=" + value +'}';}
}
import akka.actor.AbstractActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import akka.japi.pf.ReceiveBuilder;
import java.util.HashMap;
import java.util.Map;/*** @description: Java-AkkaDba* @author: shu* @createDate: 2022/10/27 21:13* @version: 1.0*/public class AkkaDbs extends AbstractActor {protected final LoggingAdapter log = Logging.getLogger(context().system(), this);protected final Map map = new HashMap<>();private AkkaDbs() {receive(ReceiveBuilder.match(SetRequests.class, message -> {System.out.printf("收到的key:%s,value:%s%n",message.getKey(),message.getValue());map.put(message.getKey(), message.getValue());}).matchAny(o -> System.out.printf("收到的消息:%s",o)).build());}
}
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;
import akka.testkit.TestActorRef;
import org.junit.Test;
import static org.junit.Assert.assertEquals;public class AkkademyDbTest {// 获取Actor系统的引用ActorSystem system = ActorSystem.create();@Testpublic void itShouldPlaceKeyValueFromSetMessageIntoMap() {// 创建一个actorTestActorRef actorRef = TestActorRef.create(system, Props.create(AkkaDbs.class));// 发送消息actorRef.tell(new SetRequests("key", "value"), ActorRef.noSender());// 我们需要检查Actor是否将值存入了map中,确认其行为是否正确AkkaDbs akkademyDb = actorRef.underlyingActor();assertEquals(akkademyDb.map.get("key"), "value");}}

ThisBuild / version := "0.1.0-SNAPSHOT"ThisBuild / scalaVersion := "2.11.7"// 依赖
libraryDependencies ++= Seq("com.typesafe.akka" %% "akka-actor" % "2.3.3","com.typesafe.akka" %% "akka-testkit" % "2.3.6" % "test","org.scalatest" %% "scalatest" % "2.1.6" % "test"
)lazy val root = (project in file(".")).settings(name := "ActorDemo01")
/*** @description: 样例类* @author: shu* @createDate: 2022/10/27 20:14* @version: 1.0*/
case class SetRequest (key:String ,value: Object);
import akka.actor.{AbstractActor, Actor}
import akka.event.Logging
import java.util/*** @description: Scala-AkkaDba* @author: shu* @createDate: 2022/10/27 20:52* @version: 1.0*/
class AkkaDba extends Actor {val map =new util.HashMap[String,Object]val log=Logging(context.system,this);// 接受消息override def receive: Receive = {// 指定的消息case SetRequest(key,value)=>{log.info("收到的key:{},value:{}",key,value)map.put(key,value);}// 默认消息case 0 =>{log.info("收到一个错误的消息")}}}
import akka.actor.ActorSystem
import akka.testkit.TestActorRefimport org.scalatest.{FunSpecLike, Matchers}class AkkademyDbSpec extends FunSpecLike with Matchers {// 获取系统实例implicit val system = ActorSystem()describe("akkademyDb") {describe("given SetRequest") {it("should place key/value into map") {// 创建Actor实例val actorRef = TestActorRef(new AkkaDba)// 发送消息actorRef ! SetRequest("key", "123456")// 验证消息val akkademyDb = actorRef.underlyingActorakkademyDb.map.get("key") should equal("123456")}}}
}

//JavaActorSystem system = ActorSystem.create();//Scalaimplicit val system = ActorSystem()
//JavaTestActorRef actorRef = TestActorRef.create(system, Props.create(AkkademyDb.class));//Scalaval actorRef = TestActorRef(new AkkademyDb)
//JavaactorRef.tell(new SetRequest("key", "value"), ActorRef.noSender());//ScalaactorRef ! SetRequest("key", "value")
//JavaAkkademyDb akkademyDb = actorRef.underlyingActor();assertEquals(akkademyDb.map.get("key"), "value");//Scalaval akkademyDb = actorRef.underlyingActorakkademyDb.map.get("key") should equal(Some("value"))
这样我们就完成了第一个简单的测试用例。这个基本的模式可以用于构建同步的Actor单元测试。