我是Haskell的新手,我正在尝试构建一个受测试的程序.我决定使用HUnit和Cabal.
从我所看到的一个结构良好的项目看起来如下:
src/
AppName/
Appname.hs
testsuite/
tests/
AppName/
TestRunner.hs
AppName.cabal
Setup.hs
Run Code Online (Sandbox Code Playgroud)
对我来说神秘的部分是TestRunner.hs和AppName.cabal.
在testuite/tests目录和子目录下运行所有测试的testrunner会是什么样子?它如何与Cabal集成?
另外,如何将hackage依赖项放在AppName.cabal中并从命令行构建它们?
我很难找到一个完整的示例,从头开始构建一个带有测试和依赖项的应用程序.
谢谢
我有以下简单的测试用例:
var uri = new Uri("http://foo.com/bar%2Fbaz");
Assert.AreEqual("http://foo.com/bar%2Fbaz", uri.AbsoluteUri);
Run Code Online (Sandbox Code Playgroud)
这个测试在.NET 4上失败但是传递了.NET 4.5,我可以使用ReSharper测试运行器测试它,它提供了一个方便的CLR选择菜单.
但是,如果我使用nunit console runner运行此测试,如下所示:
nunit-console.exe /framework:4.5"C:\ Data\Projects\UriTest\bin\Debug\UriTest.dll"
我的测试失败了.我甚至修改了nunit-console.exe.config并添加了这个:
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
Run Code Online (Sandbox Code Playgroud)
添加之后,我开始从跑步者那里得到这个输出:
Runtime Environment -
OS Version: Microsoft Windows NT 6.2.9200.0
CLR Version: 4.0.30319.34209 ( Net 4.5 )
ProcessModel: Default DomainUsage: Single
Execution Runtime: v4.5
Run Code Online (Sandbox Code Playgroud)
但我的测试仍然失败了.知道为什么会这样吗?
涉及Play FrameworkTestServer类的功能测试似乎只在Play控制台内部工作.
不幸的是,由play test命令执行的Play控制台中的股票测试运行器按顺序执行测试,这需要花费很多时间.我认为如果并行执行它们会运行得更快.
有没有办法并行运行测试?
更新:SBT支持在并行和不同的JVM中运行测试,这使得TestServer在理论上如果它们在不同的端口上侦听时可以使多个实例并行.Play似乎忽略了这些设置.请参阅我报告的问题:https://github.com/playframework/Play20/issues/849.对于那些展示让Play Framework尊重这些SBT测试设置以使用Build.scala文件在不同JVM中并行运行基于junit的测试的方式的人来说,这是一个赏金.
是否有一种简单的方法可以在Visual Studio中的开放测试类中运行所有测试.我发现这是我最常需要做的事情.
大多数情况下,我使用Resharpers或TestDriven.NET测试人员,我无法在testrunner中找到任何简单的方法.在Resharper中,有一个"添加所有打开的测试到会话"功能会很好,但经过大量的谷歌搜索,我找不到一个,或任何其他简单的方法来做到这一点.
是否有工具,插件或什么不做?
我有一个关于Eclipse 中的Googletest的基本问题。
我正在使用test-runner插件来运行 Googletests。但是我需要指定一个运行我的单元测试的二进制文件(当然这是有道理的。)
问题是在我的项目中,我现在有两个主要功能,一个运行实际程序,一个
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Run Code Online (Sandbox Code Playgroud)
运行谷歌测试。
每次我想运行一个时,我都会将另一个注释掉,这当然是愚蠢的。
但是你用什么方法来处理这种情况呢?
当我在resharper中使用测试运行器运行我的nunit测试时,我得到一个OutOfMemory异常.
在我看来,当测试套件运行时,它会在套件的持续时间内消耗内存,并且只有在整个测试集完成后才会释放内存.因此,即使我从多个程序集中运行一组测试,它们的集体内存占用也会被消耗掉,并且只会在最后发布.
有没有办法让测试运行器更频繁地释放内存?我们谈论的是755项似乎并不过分的测试.我认为这个问题与使用Rhino.mocks以及在此测试集合中创建的所有模拟存储库分配有关.
注意:使用Resharper 5.1,Rhino.Mocks,VS2010和NUnit 2.4.8
谢谢John Schank
在VS2012(RC,即将成为RTM)中,是否可以选择每次构建后运行的(nunit)单元测试?我喜欢这个功能,但我有两个测试类别/程序集 - 一个用于预期快速运行的实际单元测试,另一个用于数据库方案和测试生成数据.我不希望在每次构建之后运行后者,尽管我想在常规单元测试中使用此功能.有没有办法指定类别/程序集/等.应该在成功构建后执行?谢谢JP
我有几个JBehave测试,我想从Eclipse和Ant运行.在Eclipse中,我希望看到一个包含在图形输出中执行的所有不同故事,场景和步骤的树,因此我在执行此操作的测试中添加了一个自定义运行器:
@RunWith(de.codecentric.jbehave.junit.monitoring.JUnitReportingRunner.class)
public class MyStoryTest extends org.jbehave.core.junit.JUnitStories
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是相反,当使用Ant和Continuous Integration服务器运行测试时,我希望只将每个故事都看作输出中的单个项目.这通常在没有任何注释的情况下实现:
public class MyStoryTest extends JUnitStories
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
那么我如何告诉Ant(junit Ant任务)使用与Eclipse不同的跑步者?让事情变得更复杂:目前我在Eclipse(而不是Ant)中使用测试套件来运行测试:
@RunWith(org.junit.extensions.cpsuite.ClasspathSuite.class)
@org.junit.extensions.cpsuite.ClassnameFilters("foo.mypackage.tests.*")
public class MyStoriesTestSuite
{
// Nothing more to say ;)
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
干杯,蒂尔曼
我使用Karma作为测试运行器来执行我的 Jasmine 单元测试。是否有可能告诉 Karma 它应该始终使用英语语言环境启动 Chrome 实例?
我目前的业力配置是这样的:
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
browsers: [process.env.TRAVIS ? 'Chrome_travis_ci' : 'Chrome'],
customLaunchers: {
Chrome_travis_ci: {
base: 'Chrome',
flags: ['--no-sandbox']
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在使用 Unity 2019 和 C# 开发一款游戏,并为此使用了大量事件和协程。协程是必要的,因为许多计算都是在其中完成的,我不希望游戏在那段时间冻结。现在我开始使用测试运行器(播放模式)编写单元测试,并且协程只是不执行。由于我确实需要确保它们按预期工作,因此不可能仅在“更高级别”进行测试。
我已经尝试过正常的 StartCoroutine() 方法,该方法在测试文件中不起作用(“找不到方法名称”)。此外,我将我的一个协程重构为正常的 void 方法,一切运行良好并且通过了测试。我使用 Visual Studio 调试器来查看它是否跳转到协程执行,但没有。所以问题显然是协程没有执行。我考虑过将计算逻辑移至另一个 void 函数并测试该函数(并省略协程),但我必须确保协程中完成的迭代也能正常工作(它们通常比示例中更复杂)。
这是一个显示一般结构的最小示例(通常需要完成更多计算)。
public class MeasuredValues
{
List<Vector3> slidingWindow; // this is already filled when Normalize() is executed
public IEnumerator Normalize()
{
//find coordinate system origin
Vector3 originPosition = GetOrigin(); // returns a Vector3
//normalization
for (int i = 0; i < slidingWindow.Count; i++)
{
yield return null;
//reset point to be at (0,y,0)
slidingWindow[i] -= originPosition;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在测试文件中我想:
[Test]
public void …Run Code Online (Sandbox Code Playgroud) test-runner ×10
unit-testing ×3
c# ×2
java ×2
junit ×2
nunit ×2
resharper ×2
ant ×1
c++ ×1
cabal ×1
coroutine ×1
eclipse ×1
googletest ×1
hackage ×1
haskell ×1
hunit ×1
jbehave ×1
karma-runner ×1
locale ×1
sbt ×1