我正在使用TestCaseSource属性.一个问题:当sourceName字符串无效时,测试只会被忽略而不是失败.如果重命名源方法,sourceName字符串没有更新,那么这将非常糟糕,然后您将失去测试提供的覆盖范围.有没有办法改变NUnit的行为,如果sourceName无效,测试失败?
如何使用多个TestCaseSource属性为N-Unit 2.62中的测试提供测试数据?
我目前正在做以下事情:
[Test, Combinatorial, TestCaseSource(typeof(FooFactory), "GetFoo"), TestCaseSource(typeof(BarFactory), "GetBar")]
FooBar(Foo x, Bar y)
{
//Some test runs here.
}
Run Code Online (Sandbox Code Playgroud)
我的测试用例数据源如下所示:
internal sealed class FooFactory
{
public IEnumerable<Foo> GetFoo()
{
//Gets some foos.
}
}
internal sealed class BarFactory
{
public IEnumerable<Bar> GetBar()
{
//Gets some bars.
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,N-Unit甚至不会开始测试,因为它说我提供了错误数量的参数.我知道你可以指定一个TestCaseObject作为返回类型并传入一个对象数组,但我认为这种方法是可行的.
你能帮我解决这个问题吗?
我正在使用带有TestCaseSource属性的NUnit,以与NUnit TestCaseSource将值传递给工厂以及 如何将动态对象传递给NUnit TestCase函数相同的方法对动态数据进行数据驱动测试?
在每种情况下,他们使用IEnumerable <TestCaseData>来指定数据.从Nnit文档http://nunit.org/index.php?p=testCaseSource&r=2.5中可以看出,这需要是与TestCase相同的类的静态或实例成员.
我想将它重构为另一个类,因为我想使用相同的TestCaseSource属性.有谁知道这是否可能?
我有一些使用TestCaseSource函数的NUnit测试.不幸的是,我需要的TestCaseSource函数需要很长时间才能初始化,因为它以递归方式扫描文件夹树以查找将传递给测试函数的所有测试图像.(或者,它可以在每次运行时从文件列表XML加载,但仍然需要自动发现新的图像文件.)
是否可以与TestCaseSource一起指定NUnit属性,以便NUnit在用户单击节点或运行测试套件之前不会枚举测试用例(不调用TestCaseSource函数)?
将所有测试图像存储在文件夹中的需求是项目要求,因为其他无权访问测试项目的人需要将新的测试图像添加到文件夹,而无需修改测试项目的源代码.然后他们就可以查看测试结果.
一些教条式的单位测试者可能会反驳说我正在使用NUnit来做一些它不应该做的事情.我不得不承认我必须满足一个要求,NUnit是一个很棒的工具,有一个很好的GUI,可以满足我的大多数要求,所以我不关心它是否是正确的单元测试.
其他信息(来自NUnit文档)
关于对象构造的注释
NUnit在加载测试时定位测试用例,使用非静态源创建每个类的实例,并构建要执行的测试列表.每个源对象此时仅创建一次,并在加载所有测试后销毁.
如果数据源位于测试夹具本身中,则使用TestFixtureAttribute上提供的fixture参数的相应构造函数或默认构造函数(如果未指定参数)创建对象.由于此对象在运行测试之前被销毁,因此除了通过参数本身之外,这两个阶段之间或不同运行之间无法进行通信.
似乎预先加载测试用例的目的是避免在TestCaseSource和测试执行之间进行通信(或副作用).这是真的?这是要求预先加载测试用例的唯一原因吗?
注意:
需要修改NUnit,如http://blog.sponholtz.com/2012/02/late-binded-parameterized-tests-in.html中所述.
有计划将此选项引入更高版本的NUnit.
嗨,我是Nunit的新手,我将一系列对象作为TestCaseSource传递给TestCase.出于某种原因,虽然Nunit似乎首先运行测试,没有传递给它的参数,这导致忽略输出:
考试:
private readonly object[] _nunitIsWeird =
{
new object[] {new List<string>{"one", "two", "three"}, 3},
new object[] {new List<string>{"one", "two"}, 2}
};
[TestCase, TestCaseSource("_nunitIsWeird")]
public void TheCountsAreCorrect(List<string> entries, int expectedCount)
{
Assert.AreEqual(expectedCount,Calculations.countThese(entries));
}
Run Code Online (Sandbox Code Playgroud)
TheCountsAreCorrect(3次测试),失败:一个或多个子测试有错误TheCountsAreCorrect(),忽略:没有提供参数TheCountsAreCorrect(System.Collections.Generic.List
1[System.String],2), Success TheCountsAreCorrect(System.Collections.Generic.List1 [System.String],3),成功
因此,第一个测试被忽略,因为没有参数,但我不希望这个测试运行,永远,它没有意义,它正在破坏我的测试输出.我尝试忽略它并正确设置测试输出但是当我再次运行所有测试时它会回来.
有什么我想念的东西,我到处寻找.
我正在尝试使用NUnit中的TestCaseSource运行多个测试。但是我想让[SetUp]在需要时运行。
目前,它可以按我希望的方式工作,但感觉并不“正确”。因此,以下是主要的测试用例代码(简化了):
public class ImportTestCases
{
ImportTestCases()
{
TestData.RunTestSetup();
}
public static IEnumerable TestCases
{
get
{
//run the funciton under test...
var results = RunFunctionSubjectToTest(TestData.ImportantVar);
//get multiple results...
var allProperties =new TestCaseData(o).Returns(true)
ExpandNestedProperties(results.AllProperties)
.ToList()
.ConvertAll(o => new TestCaseData(o).Returns(true));
return allProperties;
}
}
}
[TestFixture]
public class ImportTests
{
[TestFixtureSetUp]
public void ImporTestSetup()
{
TestData.RunTestSetup();
}
[Test, TestCaseSource(typeof(ImportTestCases), nameof(ImportTestCases.TestCases))]
public bool PropertyTest(UnitTestHelper.PropInfo info)
{
return info.DoTheyMatch;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是[SetUp]在ImportTestCases“ TestCases”属性“ get”运行之前没有运行。“ ImportTestCases”的构造函数也未运行。因此,为了确保在引用ImportVar之前已运行“ RunTestSetup”,我必须执行以下操作:
public static class TestData
{
private static …Run Code Online (Sandbox Code Playgroud) 对于每个期望返回值,如2或4,我想将此值作为单元测试方法的参数传递.但我得到一个例外,即参数不正确.当我删除countExpected参数单元测试运行正常我只是不能断言countExpected ...
这种情况在NUnit中是否可行?
[Test, TestCaseSource("VisibleWeekDays")]
public void Test(DayOfWeek[] visibleWeekDaysSetup, int countExpected)
{
// ARRANGE
// ACT
// ASSERT
Assert.That(periods.Count(),Is.EqualTo(countExpected));
}
private static IEnumerable<TestCaseData> VisibleWeekDays
{
get
{
yield return new TestCaseData(new DayOfWeek[] {DayOfWeek.Sunday}).Returns(2);
yield return new TestCaseData(new DayOfWeek[] {DayOfWeek.Sunday, DayOfWeek.Monday}).Returns(4);
// more days...
}
}
Run Code Online (Sandbox Code Playgroud) 使用c#在selenium中使用Testcasesource开发了测试用例.在NUnit中运行测试用例后,它将错误显示为"提供的参数数量错误".这是我的测试用例代码
[TestFixture]
class testcases
{
static String[] exceldata= readdata("Inputdata.xls", "DATA", "TestCase1");
[SetUp]
public void Setup()
{
//setupcode here
}
[Test, TestCaseSource("exceldata")]
public void Sample (String level,String Username,String password,String FirstName)
{
//testcase code here
}
[TearDown]
public void TearDown()
{
tstlogic.driverquit();
}
Run Code Online (Sandbox Code Playgroud)
检索4个值,我可以看到NUnit中的值.但它将错误显示为"提供的参数数量错误".任何人都可以帮忙吗?
我的测试方法如下所示:
public static List<Something> Generator() {
return A.GenerateObjects();
}
[Test, TestCaseSource(nameof(Generator))]
public void DoSomething(Something abc) {/*do something*/}
Run Code Online (Sandbox Code Playgroud)
该代码运行良好,并为列表中的每个对象生成一个单元案例。
我想在方法中包含另一个参数,例如:
public void DoSomething(Something abc, string def)
Run Code Online (Sandbox Code Playgroud)
我已经尝试过使用这些行,但它不起作用:
public static object[] Case =
{
new object[]
{
A.GenerateObjects(),
someStrings
}
};
Run Code Online (Sandbox Code Playgroud)
也许使用循环函数迭代列表而不是直接调用方法(GenerateObjects())?我也不明白 Nunit 如何仅使用 TestCaseSource(nameof(Generator)) 直接识别列表中的对象
提前致谢!
我在三个月前编写了测试用例,当时他们工作正常,我想在另一个系统中运行这些测试用例,所以我做了基本设置.当我尝试运行量角器测试用例时,他们失败了"无法启动WebDriver会话".我尝试了很多解决方案,但它们对我不起作用.这里我附加了我的protractor.conf.js文件和错误详细信息.
protractor.conf.js
'use strict';
exports.config = {
seleniumAddress: 'http://127.0.0.1:4444/wd/hub',
baseUrl: 'http://localhost:' + (process.env.PORT || '3036'),
chromeOnly: true,
// To get the maximimum test screen size
onPrepare: function() {
browser.driver.manage().window().maximize();
},
// list of files / patterns to load in the browser
specs: [
'e2e/attributeSection/search_spec.js', 'e2e/attributeSection/create_spec.js',
'e2e/attributeSection/edit_spec.js', 'e2e/attribute/search_spec.js',
'e2e/attribute/create_spec.js', 'e2e/attribute/edit_spec.js',
'e2e/classification/search_spec.js', 'e2e/classification/create_spec.js',
'e2e/classification/edit_spec.js', 'e2e/classificationGroup/create_spec.js',
'e2e/classificationGroup/edit_spec.js'
],
exclude: [],
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
binary: 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe',
args: [],
extensions: [],
}
},
framework: 'jasmine',
jasmineNodeOpts: {
defaultTimeoutInterval: 60000
} …Run Code Online (Sandbox Code Playgroud) testcasesource ×10
nunit ×9
c# ×6
unit-testing ×3
selenium ×2
testcase ×2
.net ×1
arguments ×1
delay-load ×1
protractor ×1
testcasedata ×1
webdriver ×1