如何使用多个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作为返回类型并传入一个对象数组,但我认为这种方法是可行的.
你能帮我解决这个问题吗?
我正在尝试获取在SauceLabs云上运行的测试的会话ID,但我似乎无法访问它.
我尝试了以下方法:
//Returns null
var sessionId = (string)((RemoteWebDriver)driver).Capabilities.GetCapability("webdriver.remote.sessionid");
//Will not compile
sessionId = ((RemoteWebDriver)driver).SessionId; //This is protected.
Run Code Online (Sandbox Code Playgroud)
第二种方法特别令人困惑.它是一个受保护的属性,但如果我只能从派生类访问它,那么它对我所需要的东西基本没用.
任何帮助表示赞赏.
为了使其工作,我必须创建一个派生自的类RemoteWebDriver
,然后定义一个getter方法.例如:
class CustomeRemoteDriver : RemoteWebDriver
{
public CustomeRemoteDriver(ICapabilities desiredCapabilities):base(desiredCapabilities)
{
}
public CustomeRemoteDriver(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities):base(commandExecutor, desiredCapabilities)
{
}
public CustomeRemoteDriver(Uri remoteAddress, ICapabilities desiredCapabilities):base(remoteAddress, desiredCapabilities)
{
}
public CustomeRemoteDriver(Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout):base(remoteAddress, desiredCapabilities, commandTimeout)
{
}
public string GetSessionId()
{
return base.SessionId.ToString();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用下面的语句更新/插入一些数据到表,如果我没有参数运行它,它没关系.但是,只要我尝试使用参数执行它就会抛出:
SQL0418N - 语句包含使用无类型参数标记,DEFAULT关键字或无效的空值.
我已经在这里阅读了错误信息,但我仍然在努力解决为什么我的语句不能执行.
--This statement works
MERGE Into AB.Testing_Table A
USING (VALUES('TEST', 'P')) B(TEST_ID, "ACTION")
ON (A.TEST_ID = B.TEST_ID)
WHEN NOT MATCHED THEN
INSERT (TEST_ID, "ACTION")
VALUES ('TEST', 'P')
WHEN MATCHED THEN
UPDATE SET TEST_ID = 'TEST'
,"ACTION" = 'P';
--This statement fails with error SQL0418N
MERGE Into AB.Testing_Table A
USING (VALUES(@TEST, @ACTION)) B(TEST_ID, "ACTION")
ON (A.TEST_ID = B.TEST_ID)
WHEN NOT MATCHED THEN
INSERT (TEST_ID, "ACTION")
VALUES (@TEST, @ACTION)
WHEN MATCHED THEN
UPDATE SET TEST_ID …
Run Code Online (Sandbox Code Playgroud) 我一直在使用LINQ和Lambda表达式,但我对该功能的各个方面仍然不太满意.
所以,当我最近在一个项目上工作时,我需要根据某些属性获得一个独特的对象列表,然后我遇到了这个代码.它有效,我对此很好,但我想了解分组机制.如果我可以提供帮助,我不喜欢简单地插入代码并远离问题.
无论如何,代码是:
var listDistinct
=list.GroupBy(
i => i.value1,
(key, group) => group.First()
).ToList();
Run Code Online (Sandbox Code Playgroud)
在上面的代码示例中,您首先调用GroupBy
并传递一个lambda表达式,告诉它按属性进行分组value1
.代码的第二部分引起了混淆.
我理解这key
是value1
在(key, group)
声明中引用,但我仍然没有把我的头脑包围在正在发生的一切.
如果我使用这样的东西:
xr.Settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
Run Code Online (Sandbox Code Playgroud)
究竟是什么|=
完成的?
有没有人遇到过这样的问题,当字体大小样式应用于元素时,Gmail 客户端在呈现时不一致?例如,我将 font-size 设置为 17px 并且所有内容都呈现为太大,然后我将其设置为 16px 并且它变得非常小。
任何输入将不胜感激。
我正在尝试建立对我在类库中创建的嵌入式SQL资源文件的访问权限.但是,我不知道从哪里开始.
我使用以下方法访问了资源:
Assembly.GetExcecutingAssembly().GetManifestResourceStream("InsertTest.sql");
Run Code Online (Sandbox Code Playgroud)
我的理解是有一种方式以强类型的方式访问它们,但我似乎无法处理项目或解决方案以编程方式浏览各自的属性或资源.
我错过了什么?
C#是否与JavaScript的||具有类似的操作 设定装置?
例如,在JavaScript中,如果我想检查值是否为null并设置默认值,我可以这样做:
function foo(val){
this.name = val || "foo";
}
Run Code Online (Sandbox Code Playgroud)
但是,当我想在C#中使用此功能时,我必须走这条路:
public Foo(string val)
{
this.name = (string.IsNullOrEmpty(val) ? "foo" : val);
}
Run Code Online (Sandbox Code Playgroud)
我知道这很小,乞丐不能选择,但是,如果可能的话,我想避免得到任何涉及疯狂黑客或扩展方法的答案.我使用三元运算符很好,但我很好奇是否有一个我错过的语言功能.
更新:
各地都有很好的答案,但是J0HN和安东在头上打了一针.在上面的示例中,C#不像JavaScript那样执行"虚假"值,因此??
运算符不会考虑空字符串.
感谢您的时间和精彩的回复!
我已经在这里待了好几个小时,而且我已经走到了尽头.我已经阅读了所有地方的正则表达式,但是我仍然无法匹配比基本模式更复杂的东西.
所以,我的问题是:
我需要将"&"分隔为字符串分割为对象列表,但我需要考虑包含&符号的值.
如果您能提供任何帮助,请告诉我.
var subjectA = 'myTestKey=this is my test data & such&myOtherKey=this is the other value';
更新:
好的,首先,谢谢你的精彩,深思熟虑的回应.为了说明我为什么要这样做的一些背景知识,那就是在JavaScript中创建一个更加智能的cookie实用程序并支持ASP的键.
话虽如此,我发现以下RegExp可以满足/([^&=\s]+)=(([^&]*)(&[^&=\s]*)*)(&|$)/g
我所需要的99%.我更改了下面的贡献者建议的RegExp也忽略了空格.这允许我将上面的字符串转换为以下集合:
[
[myTestKey, this is my test data & such],
[myOtherKey, this is the other value]]
]
Run Code Online (Sandbox Code Playgroud)
它甚至适用于一些更极端的例子,允许我转换一个字符串,如:
var subjectB = 'thisstuff===myv=alue me==& other things=&thatstuff=my other value too';
成:
[
[thisstuff, ==myv=alue me==& other things=],
[thatstuff, my other value too]
]
Run Code Online (Sandbox Code Playgroud)
但是,当你拿一个像这样的字符串:
var subjectC = 'me===regexs are hard for &me&you=&you=nah, not really you\'re just a n00b';
一切都变得糟透了.我理解为什么这是因为上面的正则表达式的结果(非常棒的解释的荣誉),但我(显然)对正则表达式来说不够舒服以找出解决方法.
至于重要性,我需要这个cookie实用程序能够读取和编写ASP和ASP.NET可以理解的cookie,反之亦然.从上面的例子开始,我认为我们已经尽可能地采取了它,但如果我错了,任何额外的输入将非常感激. …
我正在玩ProtoBuf,试图了解预期的压缩类型.作为一个测试案例,我有一个10,000,000个十字符串的列表,我正在序列化,然后将其拆分为3.9mb块.ProtoBuf似乎做得很糟糕,最终创造了30多个块.以下是我运行的测试结果.
ProtoBuf-Net序列化:30个3.9mb块
BinaryFormatter序列化:12个3.9mb块
具有Deflate流序列化的BinaryFormatter:1个72kb块
我这样叫ProtoBuf:
ProtoBuf.Serializer.Serialize<List<string>>(names);
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.
可能的重复:
如果您不使用访问标识符,那么该调用什么方法?
VB.NET或C#中的函数的默认访问级别是什么?
例:
VB.NET
Function GetFoo() as Foo
Return New Foo()
End Function
Run Code Online (Sandbox Code Playgroud)
C#
foo GetFoo()
{
return new Foo();
}
Run Code Online (Sandbox Code Playgroud)
我知道默认情况下,类是私有的。如果未指定任何内容,成员仅继承其父母的访问级别吗?
c# ×8
.net ×5
javascript ×2
unit-testing ×2
compression ×1
css ×1
db2 ×1
gmail ×1
grouping ×1
html-email ×1
lambda ×1
linq ×1
null-check ×1
nunit ×1
operators ×1
protobuf-net ×1
regex ×1
saucelabs ×1
sql ×1
upsert ×1
vb.net ×1