小编Sor*_*ona的帖子

如何在不运行方法的情况下模拟方法调用和返回值?

请考虑以下方法:

public boolean isACertainValue() {
        if(context.getValueA() != null && context.getValueA().toBoolean() == true) {
        if(context.getType() != null && context.getType() == ContextType.certainType) {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我没有写这个代码,它是丑陋的,它完全过于复杂,但我必须使用它.

现在我想测试依赖于对此方法的调用的方法.

我以为我可以通过以下方式处理:

Mockito.when(spy.isACertainValue()).thenReturn(true); 因为那是我要测试的情况.

但它不起作用,因为它仍然调用方法体:/

我得到了nullpointers,或者说我得到了一些东西

misusing.WrongTypeOfReturnValue; getValueA()不能返回Boolean.getValueA()应该返回ValueA

所以我尝试(作为一种解决方法):

Mockito.when(contextMock.getValueA()).thenReturn(new ValueA());Mockito.when(contextMock.getType()).thenReturn(ContextType.certainType);

但后来我得到一个我似乎无法调试的nullpointer.

那么,在这种情况下如何正确完成?

java junit mockito

15
推荐指数
1
解决办法
3万
查看次数

Playframework:使用Scalatags而不是Twirl

我更喜欢使用前者而不是后者,但我不确定如何将Scalatags合并到playframework中.

这是我简单的布局:

object Test
{
  import scalatags.Text.all._
  def build =
  {

    html(
      head(
        title := "Test"
      ),
      body(

        h1("This is a Triumph"),
        div(
          "Test"
        )
      )
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试渲染它的方式:

Ok(views.Test.build.render)
Run Code Online (Sandbox Code Playgroud)

问题是,我把它作为一个普通的字符串,而不是HTML.

现在,当然一个解决方案就是简单地追加.

Ok(views.Test.build.render).as("text/html")
Run Code Online (Sandbox Code Playgroud)

但这真的是唯一的方法吗?(没有创建一个辅助方法)

scala playframework scalatags

11
推荐指数
1
解决办法
646
查看次数

光滑连接两个表并获得两者的结果

我有这样的多对多关系设置:

人< - > PersonField < - >字段

现在,我不仅要查询Person的所有字段(我可以这样做),而且还要查询PersonField与Person of Field的连接版本.(我想在数据透视/中间表"PersonField"中查询/检索信息!)

人:

case class Person(id: Long, name: String)
{
   def fields =
   {
       person <- Persons.all.filter(_.id === this.id)
       field <- person.fields
   } yield field
}

class Persons(tag: Tag) extends Table[Person](tag, "persons")
{
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
    def name = column[String]("name")

    def * = (id, name) <> (Person.tupled, Person.unapply)
    def fields = PersonFields.all.filter(_.personID === id).flatMap(_.fieldFK)
}

object Persons
{
    lazy val all = TableQuery[Persons]
}
Run Code Online (Sandbox Code Playgroud)

领域:

case class Field(id: …
Run Code Online (Sandbox Code Playgroud)

scala join playframework-2.0 slick slick-3.0

9
推荐指数
1
解决办法
2473
查看次数

将多个.OBJ-index-buffers映射/折叠到OpenGL的1索引缓冲区

我正在尝试加载.obj文件并在帮助下绘制它glDrawElements.

现在,glDrawArrays一切都运作完美,但它 - 当然 - 效率低下.

我现在遇到的问题是,.obj文件使用多个索引缓冲区(对于每个属性),而OpenGL只能使用一个.所以我需要相应地映射它们.

那里有很多伪算法,我甚至找到了一个C++实现.我确实知道很多C++,但奇怪的是我没有帮助我在Scala中实现.

让我们来看看:

private def parseObj(path: String): Model =
{
    val objSource: List[String] = Source.fromFile(path).getLines.toList

    val positions: List[Vector3] = objSource.filter(_.startsWith("v ")).map(_.split(" ")).map(v => new Vector3(v(1).toFloat,v(2).toFloat,v(3).toFloat))//, 1.0f))
    val normals: List[Vector4] = objSource.filter(_.startsWith("vn ")).map(_.split(" ")).map(v => new Vector4(v(1)toFloat,v(2).toFloat, v(3).toFloat, 0.0f))
    val textureCoordinates: List[Vector2] = objSource.filter(_.startsWith("vt ")).map(_.split(" ")).map(v => new Vector2(v(1).toFloat, 1-v(2).toFloat)) // TODO 1-y because of blender
    val faces: List[(Int, Int, Int)] = objSource.filter(_.startsWith("f ")).map(_.split(" ")).flatten.filterNot(_ == "f").map(_.split("/")).map(a => ((a(0).toInt, a(1).toInt, a(2).toInt))) …
Run Code Online (Sandbox Code Playgroud)

opengl algorithm scala .obj index-buffer

9
推荐指数
1
解决办法
311
查看次数

如何确保字符串的子字符串正好n次?

我想检查String是否包含某个子字符串n次.我知道我能做到:

Assertions.assertThat(myString).contains("xyz");

甚至 Assertions.assertThat(myString).containsOnlyOnce("xyz");

但我怎样才能确保这一次?

我尝试过类似的东西:

Assertions.assertThat(myString).areExactly(n, myString.contains("xyz")); 但遗憾的是这不可编辑.

有任何想法吗?

java tdd junit assertj

9
推荐指数
2
解决办法
1625
查看次数

如何在没有相同项目根的情况下进行sbt-(本地)多项目?

我想在intellij中同时处理多个sbt项目.项目是"单向依赖",意味着一个是(可重用)核心,另一个是构建在该核心上的实际应用程序.两者目前都在开发中.

我希望核心驻留在除应用程序之外的另一个基本/根目录中,因此:

- /core
-- build.sbt

- /application
-- build.sbt
Run Code Online (Sandbox Code Playgroud)

我希望能够

  1. 在同一个IntelliJ窗口中修改两个项目
  2. 将两个项目都保留在各自的文件夹中(周围没有包装文件夹!).Core也将用于其他应用程序,这些应用程序不是当前"应用程序"的兄弟,所以我不希望它们位于同一个根文件夹下!

我尝试了什么,到目前为止我发现了哪些问题:

设置如

lazy val core = project.in(file("../core"))
lazy val application = project.in(file(".")).dependsOn(core)
Run Code Online (Sandbox Code Playgroud)

因为sbt断言多项目设置中的每个项目的目录都包含在同一个构建根目录中,所以不起作用:

sbt java.lang.AssertionError:断言失败:构建根/应用程序中不包含目录/核心

设置如

lazy val core = RootProject(file("../core"))
lazy val application = project.in(file(".")).dependsOn(core)
Run Code Online (Sandbox Code Playgroud)

不是解决方案,因为:

  1. 不能在一个IntelliJ窗口中同时拥有这两个项目
  2. 奇怪的是,核心类在应用程序中找不到,尽管导入工作正在进行中

现在我是一个新手,我猜(并希望)必须有一个解决这个问题的方法.我不可能是唯一一个想要在没有包装层的情况下分离我的项目并且仍然可以在我选择的IDE中修改它们的人.

编辑:

@ OlegRudenko的解决方案对我来说是半工作的.由于core还有一些依赖项,我无法编译或使用它application.

coreapplication引入一些依赖项,例如Logger,当我进入并尝试使用core编译器的组件时,我会尖叫,因为它无法找到依赖项core(例如记录器).

另外,core拉入例如lwjgl并且我想使用它的一些组件application,没有机会,因为它无法找到该依赖项的包core.

现在我所做的是一个hacky非解决方案.我只是开发都coreapplication在同一的IntelliJ项目,并保持git的回购专用.

这根本不是一个解决方案,因为我想在开源core时暂时application关闭源代码,我仍然想同时处理这两个问题,改进 …

dependencies scala intellij-idea multi-project sbt

8
推荐指数
2
解决办法
2272
查看次数

将ListCreateAPIView-class添加到路由器

如何将ListCreateAPIView添加到路由器URL?

通常我喜欢:

router = routers.DefaultRouter()
router.register(r'busses', BusViewSet)
Run Code Online (Sandbox Code Playgroud)

但现在我有:

class CarList(generics.ListCreateAPIView): ...
Run Code Online (Sandbox Code Playgroud)

我现在把它添加到urlpatterns:

urlpatterns = patterns('', 
url(r'^carts/', CarList.as_view(model=Car), name='cars'),
Run Code Online (Sandbox Code Playgroud)

我想添加这个Cars-view(如果我手动调用url,它正在按预期工作!)到路由器,所以它在概述页面中!

所以:它按原样工作,但我必须手动输入网址,它不在API的概述页面中.

django django-rest-framework

7
推荐指数
1
解决办法
1016
查看次数

btDefaultMotionState的多个实例都被忽略,但只有一个

总结问题:

到目前为止,我的世界里有两具尸体,一枚是地面,另一枚是一个叫做"坠落之星"的坠落盒子.

1)我不明白为什么我的子弹世界与我绘制的世界不一致,除非我设置btVector3(2,2,2)了(btDefault)MotionState 的偏移量.在代码中的任何地方都没有花哨的魔法可以解释偏移.或者至少我找不到任何理由,不是在着色器中,而是在任何地方.

2)我希望能够使用多个实例btDefaultMotionState,确切地说,我想将一个实例用于下降的实体并将其放置在地面上的某个位置,然后为地面创建另一个应该与我的图形对齐的实例 - 地面,永远不动.

我在2)方面遇到的问题是,无论出于什么原因btDefaultMotionState,坠落实体的实例总是也影响地面实例,没有任何参考.

现在到代码:

创建fallBox:

btCollisionShape *fallingBoxShape = new btBoxShape(btVector3(1,1,1));
btScalar fallingBoxMass = 1;
btVector3 fallingBoxInertia(0,0,0);
fallingBoxShape->calculateLocalInertia(fallingBoxMass, fallingBoxInertia);

// TODO this state somehow defines where exactly _ALL_ of the physicsWorld is...
btDefaultMotionState *fallMotionState = new btDefaultMotionState(btTransform(btQuaternion(0,0,0,1), btVector3(2,2,2)));
//btDefaultMotionState *fallMotionState = new btDefaultMotionState();
btRigidBody::btRigidBodyConstructionInfo fallingBoxBodyCI(fallingBoxMass, fallMotionState, fallingBoxShape, fallingBoxInertia);
/*btTransform initialTransform;
initialTransform.setOrigin(btVector3(0,5,0));*/
this->fallingBoxBody = new btRigidBody(fallingBoxBodyCI);
/*fallMotionState->setWorldTransform(initialTransform);
this->fallingBoxBody->setWorldTransform(initialTransform);*/
this->physicsWorld->addBody(*fallingBoxBody);
Run Code Online (Sandbox Code Playgroud)

现在对我来说有趣的部分是btVector3(2,2,2)将它与我绘制的世界对齐的必要偏移量:

btTransform initialTransform;
initialTransform.setOrigin(btVector3(0,5,0));
this->fallingStarBody = new btRigidBody(fallingStarBodyCI); …
Run Code Online (Sandbox Code Playgroud)

c++ game-engine game-physics bulletphysics

7
推荐指数
1
解决办法
318
查看次数

SBT在Sources中查找子类型

有没有办法找到扩展某个类中的类/对象sbt

我玩了https://github.com/ruippeixotog/sbt-classfinderCompile,Test但这似乎只是好处.

我打算做的是:

  1. 查找所有类extends StyleSheet.Standalone(来自 https://github.com/japgolly/scalacss/)
  2. "编译"(*)(object.render[TypedTag[String]]它们并将输出放在特定文件夹中

(*)实际上我想在每个上面调用render方法并将输出(一个字符串)放到一个x.css文件中.

scala sbt

7
推荐指数
1
解决办法
111
查看次数

BroadcastHub过滤基于"资源"连接的客户端正在进行?

我正在编写一个纯websocket web应用程序,这意味着在websocket升级之前没有用户/客户端步骤,更具体地说:身份验证请求和其他通信一样遍历websockets

有/是:

  • / api/ws上只有一个websocket端点
  • 连接到该端点的多个客户端
  • 多个客户的多个项目

现在,并非每个客户端都可以访问每个项目 - 对它的访问控制是在服务器端(ofc)实现的,并且与websockets本身无关.

我的问题是,我希望允许协作,这意味着N个客户可以一起处理1个项目.

现在,如果其中一个客户端修改了某些内容,我想通知正在处理该项目的所有其他客户端.

这一点尤其重要,因为atm我是唯一一个正在研究这个并进行测试的人,这是我身上的重大疏忽,因为现在:

如果客户端A连接到Project X并且客户端B连接到Proejct Y,如果其中任何一个在其各自的项目中更新某些内容,则另一个会收到有关这些更改的通知.

现在我的WebsocketController相当简单,我基本上有这个:

private val fanIn = MergeHub.source[AllowedWSMessage].to(sink).run()
private val fanOut = source.toMat(BroadcastHub.sink[AllowedWSMessage])(Keep.right).run()

def handle: WebSocket = WebSocket.accept[AllowedWSMessage, AllowedWSMessage]
{
  _ => Flow.fromSinkAndSource(fanIn, fanOut)
}
Run Code Online (Sandbox Code Playgroud)

现在从我的理解,我需要的是

1)每个项目有多个websocket端点,例如/ api/{project_identifier}/ws

(X)或

2)根据他们正在工作的项目拆分WebSocket连接/连接客户端的一些方法.

因为我不想去路线1)我将分享我的想法2):

我现在没有看到解决方法的问题是,我可以在服务器端轻松创建一些集合,在那里我存储哪个用户在任何给定时刻处理哪个项目(例如,如果他们选择/切换项目,客户端将其发送到服务器并存储此信息)

但我仍然有那个fanOut,所以这不会解决我在WebSocket/AkkaStreams方面的问题.

是否有一些魔法(过滤)被调用,BroadcastHub这是我想要的?

编辑:现在在这里共享我的整个websocket逻辑,尝试后但未能应用@James Roper的良好提示:

 class WebSocketController @Inject()(implicit cc: ControllerComponents, ec: ExecutionContext, system: ActorSystem, mat: Materializer) extends AbstractController(cc)
Run Code Online (Sandbox Code Playgroud)

{val logger:Logger = Logger(this.getClass())

type WebSocketMessage = Array[Byte]

import scala.concurrent.duration._

val tickingSource: Source[WebSocketMessage, …
Run Code Online (Sandbox Code Playgroud)

broadcast websocket akka playframework akka-stream

6
推荐指数
1
解决办法
252
查看次数