çŸæç¹ã§ã¯ãéåžžã®ããããã£ã®å€ã®ã¿ããã¹ãã§ããã€ã³ãã¯ãµãŒã®å€ããã¹ãããæ¹æ³ã¯ãããŸããã 次ã®ãããªãã¹ããäœæããå¿ èŠããããŸãã
`` `cïŒ
[ãã¹ããã£ã¯ã¹ãã£]
ãããªãã¯ã¯ã©ã¹TestClass
{{
ã¯ã©ã¹ã®äŸ
{{
ãã©ã€ããŒãèŸæž
public string this[string key]
{
get { return dictionary[key]; }
set { dictionary[key] = value; }
}
}
[Test]
public void Test()
{
var obj = new Example
{
["TEST1"] = "1",
["TEST2"] = "2",
};
Assert.That(obj, Has.Property("Item", "TEST1").EqualTo("1").And.Property("Item", "TEST2").EqualTo("2"));
}
}
`` `
ç§ã¯ãã®èãã奜ãã§ãã
CïŒã¯ååä»ãã€ã³ããã¯ã¹ä»ãããããã£ããµããŒãããŠããŸããããVB.NETã¯ãµããŒãããŠããŸãã æ§æ.Property("Name", index1, ...)
ã¯ååä»ãã€ã³ãã¯ãµãŒçšã«äºçŽããå¿
èŠããããšæãã®ã§ãããã©ã«ãã®ã€ã³ãã¯ãµãŒã«äœ¿çšãããã®ãèŠãããããŸããã ååãã©ã¡ãŒã¿ãŒãæž¡ãå¿
èŠããªãããã«ããããšã§ãCïŒèšèªãå°éã§ããããã«ããããšæããŸãã
Has.Item("TEST1").EqualTo("1")
ãŸãã¯Has.Index("TEST1").EqualTo("1")
ã«ã€ããŠã©ãæããŸããïŒ
@ jnm2
ã·ã§ãŒãã«ãããšããŠãItemããŸãã¯ãIndexerãã¡ãœããã䜿çšããã®ã¯äŸ¿å©ã§ãããå®éã«ã¯CïŒã§ã€ã³ãã¯ãµãŒåãå€æŽããããšãã§ããŸãïŒ -ã¢ã€ãã
@ Ch0senOneååãå€æŽããããšãå¯èœã§ãã æ確ã«ããããã«ãCïŒã§ããã©ã«ã以å€ã®ã€ã³ãã¯ãµãŒãäœæããããšã¯ã§ããŸããã ããšãã°ã2ã€ã®ã€ã³ãã¯ãµãŒã宣èšããããCïŒããååã䜿çšãããããããšã¯ã§ããŸããã
èããŠã¿ããšã Has.Item("value")
ã¯Contains.Item
ãšæ··åããããã®ã§ã¯ãªãããšæããŸãã ã ããå€åHas.Index("value")
ïŒ
ãããã£ãŠãããã©ã«ãã®ã€ã³ãã¯ãµãŒã«ã¯Has.Index("IndexValue")
ããããã©ã«ã以å€ã®ã€ã³ãã¯ãµãŒã«ã¯Has.Property("PropertyName", indexParams)
ãåªå
ããŸãã Has.Property
ã¯ãæ
£çšçãªCïŒã§Has.Index
ã䜿çšããããšã§ãã£ãŠããããã©ã«ãã®ã€ã³ãã¯ãµãŒã§ãæ©èœããããšã«ãªããŸãã
ãŸãã¯ããããããªãããå Žåã¯ã Has.Index["IndexValue"]
ãš
Has.Property("PropertyName")[indexparams]
...ð
å®éã Contains.Item("ItemValue")
ãšæ··åãããªãããã«ããããã«ãã€ã³ãã¯ãµãŒæ§æã䜿çšããŠHas.Item["AtIndex"]
ãåé¿ã§ãããã©ããçåã«æããŸã...ããã«ã€ããŠã©ãæããããããŸããïŒ
ä»ã®@nunit / framework-teamã¡ã³ããŒã®èããèŠãŠã¿ãŸãããã
æååã§ã¯ãªãã©ã ãã䜿çšããŠããããã£ãåŠçããæ¹åããã§ã«å®çŸ©ããŸããã ããã«æéãè²»ãããã»ããããããã§ãã ç§ã¯é»è©±ãããŠããã®ã§ãåé¡çªå·ãæããããŸããã
@CharliePoole https://github.com/nunit/nunit/issues/26ïŒ
ããã¯Has.Property
ãšã£ãŠæå³ããããŸãã ç§ãã¡ã«ã§ããããšïŒ
Has.Property(_ => _.PropertyName[index1, ...])
Has.Property(_ => _.PropertyName, index1, ...)
ããã©ã«ã以å€ã®ããããã£ãå¿
èŠã«ãªããŸã§ã Has.Property
äœããã¹ãã§ã¯ãªããšæããŸããä»ã®ãšããã Has.Index(value1, ...)
ãŸãã¯Has.Index[value1, ...]
ãŸãã¯Has.Item[value1, ...]
æäŸããã ãã§ããã¯ããã«äžè¬çãªããã©ã«ãã®ã€ã³ãã¯ãµãŒã
ããã ã ãšã«ããèŠæ±ãããŠããªãååä»ãã€ã³ãã¯ãµãŒã«ã€ããŠã¯åæããŸãã
@ jnm2æ€èšã®ããã«ããã«ãããŒã€ã³ãã¯ãµãŒãäœæããããšãã§ããŸãã äŸãã°
this[string key1, string key2]
ãã®åé¡ã«é¢ããæŽæ°ããããã©ããããŸãã¯IEnumerableãç¶æ¿ããªãåã§ã€ã³ãã¯ãµãŒããã¹ãããçŸåšã®æ¹æ³ããããã©ããçåã«æã£ãŠããŸãã KeyNotFoundExceptionãã¹ããŒãããŠãããã©ããã確èªã§ãããšæããŸãã ã€ã³ãã¯ãµãŒã«ããŒãååšãããã©ããã確èªããããã«èŠèœãšããŠãããã®ã¯ä»ã«ãããŸããïŒ
@ crush83ã¯ããç§ã®index1, ...
æ§æã¯ãäœãããã«ããŠãããããèæ
®ããå¿
èŠãããããšã瀺ãããã®ãã®ã§ããã
å®éã«èŸæžãŸãã¯ããŒä»ãã³ã¬ã¯ã·ã§ã³ã§ãããªããžã§ã¯ãã«ã€ããŠè©±ããŠããã®ã§ãªãéããçšèªããŒã¯å¥œãã§ã¯ãããŸããã ãããã¯ããã©ã«ãã®ã€ã³ãã¯ãµãŒãåãããã®ã§ãããããã©ã«ãã®ã€ã³ãã¯ãµãŒãåãããã¹ãŠã®ãã®ã«ããŒãããããã§ã¯ãããŸããã ïŒãã®çšèªã䜿çšããŠããã®ã§ã Contains.Key
æ§æã圹ç«ã€ãšæããããããŸãããïŒæ¹åã§ããŸããïŒïŒ
ããã«è¡šç€ºãããŠãã以å€ã«é²æ©ã¯ãããŸããã ææ¡ãå¿
èŠã§ãã äœããåºãããã«ãç§ã®çŸåšã®ãæ°ã«å
¥ãã¯Has.Item(params object[] indexerArgs)
ã§ãååã«é¢ä¿ãªãããã©ã«ãã®ã€ã³ãã¯ãµãŒãåŒã³åºããŸãã
ããã¯ãããŸã§ã«èŠæ±ããããã¹ãŠãå®è¡ããŸããïŒ
+1
@ nunit / framework-team次ã®æ°ããAPIããµããŒãããŸããïŒ
namespace NUnit.Framework
{
public abstract class Has
{
public static ResolvableConstraintExpression Property(string name);
+ public static ResolvableConstraintExpression Item(params object[] indexerArgs);
}
}
namespace NUnit.Framework.Constraints
{
public class ConstraintExpression
{
public ResolvableConstraintExpression Property(string name);
+ public ResolvableConstraintExpression Item(params object[] indexerArgs);
}
}
APIã«è¿œå ããçç±ããããŸã§ãããããIndexerConstraint
ã¯ã©ã¹ãå
éšã®ãŸãŸã«ããŠãããŸãã
ç§ã«ã¯ããã§ããã
å¥ã®è³æ祚ãç§ã¯ã³ã³ãœãŒã«ãã¹ãã®ããã«ãã®æ©èœã欲ããã£ãã ãã§ãã ð
@ jnm2ãã®åé¡ã¯ãŸã ããŒã ãããããããšã§ããïŒ
ç§ã¯ãã®åé¡ã«ã€ããŠç°¡åã«èª¬æããŸãããããµããŒããããŠããAPIãã©ã®ããã«è¡šç€ºãããããæ£ç¢ºã«ç解ããŠããªãããã次ã®ããã«ãªããŸãã
/// obj from the initial post example
Assert.That(obj, Has.Item("TEST1").EqualTo(1).And.Item("TEST2").EqualTo(2));
ãŸãã¯ããã¯ïŒ
Assert.That(obj, Has.Item("TEST1", 1).And.Item("TEST2", 2));
ïŒ
ããªãã®äŸã¯params object[]
åãã®ã§ããªãã·ã§ã³2ã䜿çšããŸããã
éžæãããšä»®å®ããŸãã 2ãé åã¯ã1ã€ã®ãªããžã§ã¯ããæäŸãããŠãããã®ããã«å¿ èŠã§ãããããŒãååšããããšãè¡šæãã2ã€ã®ãã©ã¡ãŒã¿ãŒïŒããŒãšå€ïŒãå¿ èŠã§ããïŒ ä»ã®çµã¿åããïŒå€ããå°ãªããæåŸ ããããã©ã¡ãŒã¿ïŒã倱æããŸããïŒ
@Poimenã¯ãããããŠç§ãã¡ã¯å©ããŠ
ã€ã³ãã¯ãµãŒã¯è€æ°ã®åŒæ°ãåãããšãã§ãããããé åãå¿ èŠã§ãã äŸãã°ïŒ
public string this[int x] => "First indexer";
public string this[string x] => "Second indexer";
public string this[int x, int y] => "Third indexer";
Has.Item(42).EqualTo("First indexer")
ã Has.Item("42").EqualTo("Second indexer")
ãããã³Has.Item(1, 2).EqualTo("Third indexer")
ãŸãã
ã»ããããªãã¯æ¯æ¥äœãæ°ããããšãåŠã³ãŸã-ç§ã¯ãããã¿ã€ããã¹ã ãšæã£ãŠããŸããããã£ãšïŒsee_no_evilïŒç§ã¯ä»¥åã«ãã«ãããŒã€ã³ãã¯ãµãŒã䜿ãåã³ããããŸããã§ãã...
ããããŸããããã£ããããä»é±ã¯äœãããŸãšããæ¹æ³ãèŠãŠãããŸãã
@ jnm2ãã®åé¡ã®PRãäœæããŸããã
ç§ãæ±ããŠããæžå¿µã®1ã€ã¯ãã³ãŒãã«ãã£ãŠçæããããšã©ãŒã¡ãã»ãŒãžã§ãã
Has.Item(42)
ãšã©ãŒã¡ãã»ãŒãžã¯å°ããããããŒãã§ãããããã解決ããæãã¯ãªãŒã³ãªæ¹æ³ãããããŸããã ãããã¯ãã¯æ¬¡ã®ãšããã§ãã
https://github.com/nunit/nunit/pull/3609/commits/96154ca6402c692cec5e0ae6947f9922e72799fe#diff -ceeee4b8399633f181b6bccd5a39eb32R72
@Poimenç³ãèš³ãããŸããããã©ãããæå³ã
@ jnm2衚瀺ããããšã©ãŒã¡ãã»ãŒãžã¯æ¬¡ã®ãšããã§ãã
Expected: indexer [System.Int32]
But was: "not found"
ãšã©ãŒã¡ãã»ãŒãžã圢æãããæ¹æ³StringifyArguments
é¢æ°ã¯å°ããããããŒãã§ãã
ãããã£ãŠãç§ã®ã²ã©ãè¡šçŸããã質åã¯ãç®çã®ã¡ãã»ãŒãžåºåãçæããããã¯ãªãŒã³ãªæ¹æ³ããã£ããã©ãããšããããšã§ãã
@ jnm2ç§ã¯ã¬ãã¥ãŒã®ã³ã¡ã³ãã«å¯ŸåŠãããšæããŸãïŒåœŒãã«æè¬ããŸãïŒã ã©ãã«ã«ã¯awaiting:contributor
ãšæžãããŠããŸãã
ç§ããå®äºãããããšãããªãã«ç¥ãããããã«ç§ãããªããã°ãªããªãããšããã£ãšãããã©ããã¯ããããŸããïŒ+1ïŒ
Has.Property
ãããããã£ãèŠã€ããããªããšãã«è¡šç€ºãããã¡ãã»ãŒãžã«ã§ããã ãè¿ã¥ããå¿
èŠããããšæããŸãã 次ã«ã property
ãdefault indexer
ã«çœ®ãæããããããã£åãaccepting arguments [42]
ãªã©ã«çœ®ãæããå¿
èŠããããŸãã åŒæ°ã®åãäžèŠ§è¡šç€ºããã®ã§ã¯ãªãã MsgUtils.FormatCollection
ãªã©ã®æ¢åã®æžåŒèšå®ãã«ããŒã®1ã€ã䜿çšããŠåŒæ°ã®å€ã衚瀺ããå¿
èŠããããšèããåŸåããããŸãã ããšãã°ãåŒæ°ã®1ã€ãnullã§ãããããŸããŸãªã¿ã€ãã§æ©èœããå ŽåããããŸãã
ããããããã¯çŽ æŽãããã§ãïŒ PRã¹ã¬ããèªäœã«ãã®ãããªã³ã¡ã³ããããã°çæ³çã§ãã
ã¢ãµãŒã·ã§ã³ãäžããããå ŽåïŒ
`` `cïŒ
Assert.ThatïŒtesterãHas.ItemïŒ "wow"ïŒïŒ;
It producers the message:
äºæ³ïŒåŒæ°ãåãå
¥ããããã©ã«ãã®ã€ã³ãã¯ãµãŒ<
ãããããèŠã€ãããŸããã§ããã
Given the assertion:
```c#
Assert.That(tester, Has.Item("wow").EqualTo(1));
ããã¯ã¡ãã»ãŒãžãçæããŸãïŒ
Default indexer accepting arguments < "wow" > was not found on NUnit.Framework.Constraints.IndexerConstraintTests+NamedIndexTester.
ããã¯ã MsgUtils.FormatCollection
é¢æ°ã䜿çšããŠçæãããŸããã
ãããã£ãŠã詳现ãè¿œå ãããããããã£ã¡ãã»ãŒãžãšããå³å¯ã«äžèŽããŸãã
ç§ã¯2çªç®ã®ã±ãŒã¹ããšãŠã奜ãã§ãã æåã®ã±ãŒã¹ã¯ãåŒæ°å€ã§ã¯ãªãåŒæ°ã¿ã€ãã瀺ããŠãããããç§ã«ã¯ãŸã æå³çã«ééã£ãŠããããã«èŠããŸãã åŒæ°å€ã®ã¿ããããååŒæ°å€ã¯ã€ã³ãã¯ãµãŒã®åŒæ°ã¿ã€ãã®ç¯å²ãšäžèŽã§ããŸãã IEnumerable<char>
åŒæ°ãåæ§ã«æ©èœããããã System.String
åŒæ°ãæã€ã€ã³ãã¯ãµãŒãååšããå¿
èŠãããããã«èŠããããã®ã¯èª€è§£ãæããŸãã
IEnumerable<char>
ã¯é¢šå€ãããªãŠãŒã¹ã±ãŒã¹ã§ã...ãããã確ãã«ãç§ã¯èŠç¹ãç解ããŠããŸãã
ã ãããæ»ã£ãŠ-äžããããïŒ
`` `cïŒ
Assert.ThatïŒtesterãHas.ItemïŒ "wow"ïŒïŒ;
producers the message:
äºæ³ïŒåŒæ°ãåãå
¥ããããã©ã«ãã®ã€ã³ãã¯ãµãŒ<"wow">
ãããããèŠã€ãããŸããã§ããã
For numbers it goes into the usual suffix - given:
```c#
Assert.That(tester, Has.Item(42d));
ãããã¥ãŒãµãŒïŒ
Expected: Default indexer accepting arguments < 42.0d >
But was: "not found"
ãæåŸ
ãããããšããã¡ãã»ãŒãžã¯ãç§ã«ã¯çŽ æŽããããšæããŸãã But was: "not found"
ã¡ãã»ãŒãžã¯ãå
容ãnot found
æååã€ã³ã¹ã¿ã³ã¹ã«ã€ããŠè©±ããŠããããã«èŠããŸãããPropertyConstraintãåãããã«åäœããå Žåã¯ãåããŸãŸã«ããŠããããšããå§ãããŸãã PropertyConstraintã®å€æŽã¯ãããã©ã«ãã§ã¯ãã®PRã®ç¯å²å€ã«ãªããŸãã å¿
èŠã«å¿ããŠå€æŽãå ããããšãã§ããŸãããç§ãšãã¬ãŒã ã¯ãŒã¯ããŒã ã®ä»ã®èª°ããå€æŽãæ¿èªããŸããã
ãããç§ã¯ããããããããªãããã«ããããšããŠããŸããããããç§ã¯ãšã©ãŒã¡ãã»ãŒãžã§è§£æ±ºçãèŠã€ããããšãã§ããŸããã§ããã ç§ã¯ããããã ããããšãæãã ã§ãããïŒ
But was: not found
ãããã ConstraintResult
ãè¿ããããšãããã«æååã®åŒçšç¬Šãæ¿å
¥ãããŸãã
åèãŸã§ã«ãããããã£ããŒãžã§ã³ïŒ
`` `cïŒ
Assert.ThatïŒtesterãHas.PropertyïŒ "NoItDoesNotHaveThis"ïŒïŒ;
produces:
æåŸ
ïŒããããã£NoItDoesNotHaveThis
ããããã ã£ãïŒ
`` `
ãããã£ãŠãåŒçšç¬Šã¯ãããŸããããå€ã§ã¯ãªãåãè¿ããŸãã
ConstraintResult
ãªãŒããŒããŒããè¿ãããšã解決çã«ãªããã©ããããããŸããã§ãããïŒ
äžè²«æ§ãä¿ã€ããã«ãPropertyConstraintãè¡ã£ãŠããããšã«åºå·ããå¿
èŠããããšæããŸãã actual
å€ã®ããã©ã«ãè¡šçŸã衚瀺ããããšã¯ã倱æããã®ãããããã£ã®æ€çŽ¢ã§ãããšããã¡ãã»ãŒãžã®å Žåãææªã®äºæ
ã§ã¯ãããŸããã
ConstraintResultãã掟çããæ°ããã¯ã©ã¹ãè¿ãããšã¯ãä»ã®å¶çŽããããã«ã¹ã¿ãã€ãºããæ¹æ³ã§ãã
ããããŸãããçŽ æŽããã-ã®ããã«èãããŸã-äžããããïŒ
`` `cïŒ
Assert.ThatïŒtesterãHas.ItemïŒ42dïŒïŒ;
producers:
äºæ³ïŒåŒæ°ãåãå
¥ããããã©ã«ãã®ã€ã³ãã¯ãµãŒ<42.0d>
ããããã ã£ãïŒ
`` `
ããã¯ãããããã£å¶çŽã¡ãã»ãŒãžãšäžèŽããŸãã
@Poimenã®åªããPRãïŒhttps://github.com/nunit/nunit/pull/3609ïŒãã以å€ã®å Žåã¯ããŒãžããæºåãã§ããŠããã®ã§ã@ NUnitã®/ãã¬ãŒã ã¯ãŒã¯ãããŒã ãšèª°ããç§ã¯ãã®è³ªåãžã®è¿ éãªè§£æ±ºã®ããã«é¡ã£ãŠããŸãã
@Dreamescaperã¯ãç§ã远跡ã§ããªããªã£ããã®ã¹ã¬ããã®äžäœã«ããç§ã®æžå¿µã«æ³šæãåããŸããã Has.Item
ã¯Contains.Item
æå³ãããšèããŠã人ã
ãAssert.That(collection, Has.Item("x"));
æžã蟌ã¿ãšèªã¿åãã®äž¡æ¹ãè¡ãã®ã§ã¯ãªãããšå¿é
ããŠããŸãã ã
倱æã¡ãã»ãŒãžã«äœããè¿œå ããããšãæ€èšããããšãã§ããŸããããœãŒã¹ã³ãŒãã§Has.Item
ãèªã¿åããšãã«ããããæ£ããç解ãããšããåé¡ã¯è§£æ±ºããŸããã
Expected: Default indexer accepting arguments < 42.0d > (Did you mean to use Contains.Item?)
äžæ¹ã Item
代ããã«ææ¡ããHas.Index(42)
ãHas.Index(42).EqualTo(43)
ã¯å¥œãã§ã¯ãããŸããã ã€ã³ã¹ã¿ã³ã¹ã¯ãã€ã³ããã¯ã¹ã®é
ç®ãæããŠããŸãã ã€ã³ã¹ã¿ã³ã¹ã«ã€ã³ããã¯ã¹ããããã€ã³ããã¯ã¹èªäœã43ã«çãããšã¯èšããŸãããã€ã³ããã¯ã¹ã¯ãæž¡ããã®ã42ã§ãã
Has.Item
ãŸãã ãœãŒã¹ã³ãŒããèªããšãã«çºçããå¯èœæ§ã®ããåé¡ããããããŸãã XMLããã¥ã¡ã³ãã倱æã¡ãã»ãŒãžã®ãã³ããªã©ããœãŒã¹ã³ãŒããäœæãããšãã«åœ¹ç«ã€ããã€ãã®ç·©åçãè¿œå ãããããããŸãããHas.Index
䜿çšããŠãã ãããHas.ItemAt
䜿çšããŠãã ããã Has.ItemAt(42).EqualTo(43)
ãæåŸã®ææ¡ã¯ãã€ã³ããã¯ã¹ãäžããããŠã¢ã€ãã ãè¿ãLINQ ElementAtã¡ãœãããšé¡äŒŒããŠãããããã¡ãã£ãšåŸ ã£ãŠãã ããã
ã¿ããªHas.ItemAt
æºè¶³ããŠããŸããïŒ ææ¡ã¯å€§æè¿ã§ããã @ Poimenããã§ã«æ§ããŠããæéãå°éããããšæããŸãã
Has.ItemAt
+1 :)
Has.Item
ãæ··ä¹±ãæãå¯èœæ§ãããããšã«åæããŸãã ç§ã¯Has.ItemAt
ã奜ãã§ãããLINQæ§æã奜ããªã®ã§ã Has.ElementAt
䜿çšããŠã¿ãŸãããïŒ
ElementAtã¯çŽæ¥åçã§ã¯ãªããããããããããŸããã
ããšãã°ã Dictionary<string,string>
LINQã®ElementAtïŒ0ïŒã¯æåã®ãã¢ãè¿ããæŽæ°ãåãå
¥ããã€ã³ãã¯ãµãŒããªããããHas.ItemToïŒ0ïŒ.EqualToïŒ "..."ïŒã¯å€±æããŸãã
@CharliePooleããã¯æ¬åœã«è¯ãèãã§ãã èŠã€ããã®ã¯çŽæçã§ã¯ãªãããã§ããããªãããæãã®ãããããŸããã Item
ã¯ãããããäœããã®ã³ã¬ã¯ã·ã§ã³/èŸæž/ã«ãã¯ã¢ããã§ã€ã³ãã¯ãµãŒãåŒã³åºãã®ã§ãç§ã¯ElementAt
ã¯ãå¿
ãããã³ã¬ã¯ã·ã§ã³ã§ã¯ãªãã¯ãšãªããã®ä»ã®åæåã§æ©èœããããšãç®çãšããŠããŸãã ã ã³ã¬ã¯ã·ã§ã³èŠçŽ ã¯éåžžãã¢ã€ãã ãšåŒã°ããŸãã
@Dreamescaper Has.ItemAt(4)
ã¯ãã€ã³ãã¯ãµãŒãåŒã³åºãã®ã§ã¯ãªããåæããŠã ElementAt
ãšåãããã«æ©èœãããšäººã
ã«æãããããšãã§ãããšæããŸããïŒ
@ jnm2
ããããå¯èœã§ãããããè¯ããªãã·ã§ã³ã¯ããããŸããïŒãããŠãHas.Itemãããã¯ããã«åªãããªãã·ã§ã³ã ãšæããŸãïŒã
@ jnm2ç§ã¯å®éã«ã¯å°ãæ··ä¹±ããŠããŸãã ãã®åé¡ã¯ããããã£ã«é¢ãããã®ããå§ãŸããä»ã§ããã®ããã«ã¿ã€ãã«ãä»ããããŠããŸãã Has.PropertyãšHas.ItemAtã¯ããŠãŒã¶ãŒã®ç®ããèŠãŠãã©ã®ããã«çžäºã«é¢é£ãçžäºäœçšããŸãã¯æ¯èŒãããŸããïŒ
[ããããã£ãšã³ã¬ã¯ã·ã§ã³ã¢ã€ãã ã¯ãç¹å®ã®æœè±¡åã¬ãã«ã§åçãšããŠæ±ãããšãã§ããããšãèªèããŠããŸãããããã¯ç§ãã¡ã®ã»ãšãã©ãéåžžæäœããæœè±¡åã¬ãã«ã§ã¯ãªããšæããŸãã ïŒsmiling_impïŒ]
NUnit 4.0ã®ããšãšããŠãAPIã§çšèªãã©ã®ããã«äœ¿çšãããŠãããã確èªããå°ãã¯ãªãŒã³ã¢ãããããšããã§ãããã ãã¡ã³ããŒããšããèšèã¯ããã¢ã€ãã ããšåçã®ãã®ãšããŠãã䜿çšãããŸãããããããã£ãã¡ãœããããŸãã¯å€æ°ãæå³ããå ŽåããããŸãã
ç§ãæãå¿«é©ã«æããItemAt
以äžElementAt
æã
ã¯å§ä»»ãŸãã¯åãç¹å®ã®ã¢ãããŒããåãããã«ãããèŠãããããããªãã®ã§ãéšåçã«Enumerable.ElementAt
ã ElementAt(int index)
ç§ã匷ãå°è±¡ã¥ããã®ã¯ããããã©ã®ããã«æ©èœããããšãã詳现ã§ã¯ãªããç¹ã«index
ãšããååã®ãã©ã¡ãŒã¿ãŒã«é¢é£ä»ããããBCLã«At
ãµãã£ãã¯ã¹ã®åäŸããããšããäºå®index
ã
ãããILookupã§äœ¿çšããå ŽåãILookupã®åã€ã³ããã¯ã¹ã¯ãåäžã®èŠçŽ /ã¢ã€ãã ã§ã¯ãªããè€æ°ã®TElementãè¿ããŸãã Has.EntryAt
ã¯ãã³ã¬ã¯ã·ã§ã³ãèŸæžãããã³ã€ã³ããã¯ã¹ããšã®è€æ°èŠçŽ ã®ã«ãã¯ã¢ããã§æ©èœãããã®ã§ããå¯èœæ§ããããŸãã ç§ã®æåã®åå¿ã¯ããšããããšã§ãHas.ItemAt
è¿ãIEnumerable<TElement>
ILookupããã¯ãããããç解ã§ããååã§ãã
ã¿ãªããã¯ã©ãæããŸããïŒ è€æ°ã®ãã®ãæ©èœããŠããã®ãèŠãã®ã¯é£ããã§ãããããã§ã®å€§å€æ°ã®å¥œã¿ã¯ãã©ã®ååã人ã ã«ãšã£ãŠæãèŠã€ãããããã瀺ãã®ã«ã圹ç«ã€ãããããŸããã @ nunit / framework-team以å€ã®äººãã¡ãç§ã¯ããªããé€å€ããã€ããã¯ãããŸããã§ããã ããªããèŠãŠããŠã匷ãæ°æã¡ãæã£ãŠãããªããããã¯åžžã«åœ¹ç«ã€ããŒã¿ãã€ã³ãã§ãïŒ
@CharliePoole Has.Property("X")
ã¯ãã€ã³ã¹ã¿ã³ã¹ã«X
ãšãããã©ã¡ãŒã¿åãããŠããªãããããã£ãããããšãè¡šæããŸãã Has.ItemAt("X")
ã¯ãã€ã³ã¹ã¿ã³ã¹ã«ãæååãã©ã¡ãŒã¿ãŒãåãå
¥ããããšãã§ããããã©ã«ãã®ã€ã³ãã¯ãµãŒïŒç¡é¢ä¿ã§ããç¥ãããŠããååãæã€ãã©ã¡ãŒã¿ãŒåãããããããã£ïŒãããããšãè¡šæããŸãã
Has.Property("X").EqualTo(3)
ã¯ãã€ã³ã¹ã¿ã³ã¹ã«X
ãšãããã©ã¡ãŒã¿åãããŠããªãããããã£ãããããã©ã¡ãŒã¿åãããŠããªãget
ã¢ã¯ã»ãµãåŒã³åºããš3
ãè¿ãããšãè¡šæããŸãã Has.ItemAt("X").EqualTo(3)
ã€ã³ã¹ã¿ã³ã¹ã¯ãããã©ã«ãã®ã€ã³ãã¯ãµïŒç¡é¢ä¿ãªãããç¥ãããŠããååã§ãã©ã¡ãŒã¿ããããã£ãïŒæã£ãŠãããšäž»åŒµããã ããæ»ã£ãŠãã®3
ããªããç¹å®ã®æååãæž¡ãå Žå"X"
ãžã®get
ã¢ã¯ã»ãµãŒã
ããã©ã«ãã®ã€ã³ãã¯ãµãŒã®ååãç¡é¢ä¿ã«ããŠããã®ã¯ãCïŒãVBãããã³FïŒæ§æã¯ãã¹ãŠãååãæå®ããã«ããã©ã«ãã®ã€ã³ãã¯ãµãŒãåŒã³åºãããšãã§ãããšããããšã§ãã ïŒãããã£ãŠããããã©ã«ãããšããçšèªãïŒããã©ã«ãã®ã€ã³ãã¯ãµãŒã®æŠå¿µã¯ãªãããååä»ãã€ã³ãã¯ãµãŒã®æŠå¿µãããèšèªã§ã¯ãååãæå®ããå¿
èŠããããŸãã ããã©ã«ãã®ã€ã³ãã¯ãµãŒã®ååã¯éåžžItem
ã§ãããããã©ã«ãã®ã€ã³ãã¯ãµãŒã«ã¯ä»»æã®ååãä»ããããšãã§ããŸããããããã®èšèªã§ã¯ååãæå®ããªããŠãåŒã³åºãããšãã§ãããããããã©ã«ãã®ã€ã³ãã¯ãµãŒã®ãŸãŸã§ãã CïŒã§ã¯ã [IndexerName("ArbitraryName")]
å±æ§ã䜿çšããŠãããå®çŸããŸãã
@ jnm2ç§ã¯å®éã«ã€ã³ãã¯ãµãŒã«é¢ãããã¹ãŠã®CïŒãªã©ã®èšèªãç解ããŠããŸã...ããã...
ç©ä»¶éã§æ··ä¹±ãçããå¯èœæ§ããããšæããŸã
__you__ã¯æ··ä¹±ããªãããšã匷調ããŸãããããããããªããšè©±ããŠãããšãã ããµããããŸãïŒãœã¯ã©ãã¹æ³ãy'knowïŒwink ïŒïŒããå€ãã®äººãæ··ä¹±ããŠãããšæããããããŸãããããªãããããã
ç§ã¯ãã®è¿œå ã«å察ããŠããŸããããäžèšã®éããããã¥ã¡ã³ãã§è©³ãã説æããå¿ èŠããããšæããŸãã
PSïŒç§ã¯ãŸã£ããæé€ãããŠãããšã¯æããŸããã§ããã ïŒã¹ãã€ãªãŒïŒ
@CharliePooleããèããŸããã Has.ItemAt
/ Has.ElementAt
/ Has.EntryAt
/ etcã®éã®éžæã«åœ±é¿ãäžããªãããã«æãããã®ã§ãååã決å®ãããŸã§ãã®èæ
®äºé
ãè¡šã«ããããšã¯ã§ããŸããïŒ ãããšããç§ãèŠéããç¹ãããããã®æ··ä¹±ã®å¯èœæ§ã«åºã¥ããŠç¹å®ã®ååã®éžæããµããŒãããŠããŸããïŒ
ãããŸã§ã®ãšãããç§ã¯ItemAt
åŸããŠããŸãã @Dreamescaper ãããã¯ãŸã ããªãããããšããã§ããïŒ @CharliePoole ElementAt
奜ã¿ãè¡šçŸããŠããã®ãããããšãããã»ã¹ãèããã®ãæäŒã£ãŠãããŠããã®ãããããŸãã
Has.ItemAt
/ Has.ElementAt
/ Has.EntryAt
/ otherã§ãã£ã€ã ã鳎ãã人ãå€ããã°å€ãã»ã©ã人ã
ãçŽæçã«æãããã®ã«èªä¿¡ãæã€ããšãã§ããŸãã ãããããã¯ããã«æéãããããšã3.13ã®ãªãªãŒã¹ãã»ãã®å°ãã ãéããŠããŸãã®ã§ãç¿æ¥ããããã§ãªãŒãããŠãããšæãããæ¹ã«ã ãåŒã³ãããšæããŸãã
@ jnm2èªåã§èããŠãåãããã«å±ãŸãããšããŠããã ãã§ãã
åèªã®éžæã«ã€ããŠãç§ã¯ãç¹å®ã®åèªããç§ããªã¹ããã3çš®é¡ã®è¡šçŸã§æãããæ©èœãããã©ããããŸããå¿é ããä»ã®çµã¿åããããããã©ããçåã«æããŸããã ç§ãèšåãã3ã€ã®ãªãã·ã§ã³ã䜿çšãããšã
Has.ItemAt("foo").EqualTo("bar")
ã ããç§ã¯ããªããæ£ãããšæããŸãèšèé£ãã¯ã©ã®ãªãã·ã§ã³ã«ãé¢ä¿ãããŸãã
é·æçã«ã¯ãè§æ¬åŒ§ã䜿çšããå®éã®ã€ã³ããã¯ã¹äœæã䜿çšããããšæããŸãã ãã ããããã«ã¯ãã¯ã©ã¹ã®ã»ãããšããŠã¢ãã«åããã®ã§ã¯ãªããå®éã«å¶çŽåŒãã³ã³ãã€ã«ããå¿ èŠããããŸãã
ç§ã¯ãããç§ã®çµŠæççŽãè¶ ããŠããããšãç¥ã£ãŠããŸãïŒsmile ïŒããããç§ã¯ããã§ãã£ã€ã ã鳎ãããšæããŸãã...
ç§ã¯ItemAt
奜ãã§ãã
@CharliePooleãææ¡ããããã«ãç§ã¯ããã€ãã®ãŠãŒã¹ã±ãŒã¹ãèããªããæéãè²»ãããŸããã ElementAt
ã¯IEnumerable
ç¶æ³ã§ããå€ã䜿çšãããèšèªã€ã³ãã¯ãµãŒã¯IEnumerable
以äžã®ãã®ãåŠçã§ãããšæããŸããã ç§ã¯ãã°ããã®éElementAt
ãã§ã³ã¹ã«åº§ã£ãŠãããããèããŸããïŒ
`` `cïŒ
Assert.ThatïŒ...ãHas.ElementAtïŒ "one"ã "two"ïŒïŒ;
against:
```c#
Assert.That(..., Has.ItemAt("one", "two"));
ItemAt
ã¯ãè€æ°ã®å€ã®ã€ã³ãã¯ãµãŒãè¡šçŸããæ¹ãèªç¶ã ãšæããŠããŸãã
ç§ã¯ãŸãããã±ããã¯ããšããšããããã£ã®å¶çŽã®ããã®ç絡ãæå³ããŠããã ItemAt
ã¯ãã®ç©èªã«é©åããŠãããšèããŸããã ïŒãã ããããã¯ãããè¯ã/ããè¯ã/ãªã©ã«å€åœ¢ããããšãæé€ãããã®ã§ã¯ãªããåãªãèŠç¹ã§ãïŒã
ç§ãItemAt
奜ããªã®ã§ããããéåæ°ãšåŒã³ããããæ¯æããŠæ¯é
ããŸãããðº
æ··ä¹±ãé²ãããã«ããããå®äºåŸããã«ææžåããããªãªãŒã¹ããŒãã«å«ãŸããããã«ããŸãããã
@Poimen ReïŒããªãã®çµŠæççŽãç§ãã¡ãããã«æ²¿ã£ãŠé²ãã«ã€ããŠãç§ãã¡å šå¡ãç©äºãäœãäžããŠããçšåºŠãéå°è©äŸ¡ããªãã§ãã ããã ããªãã®èããå ±æããŠãããŠããããšãïŒ
ãããŠãè³éççŽã«é¢ããŠã¯ãããã®èª°ããNUnitã«åãçµãã§çŽ$ 0ã®å¹Žä¿žã皌ãã§ããã®ã§ãç§ãã¡ã¯çåãè³éççŽã«ãããšæããŸãð
@Dreamescaperã¯PRã§å¥ã®è¯ã質åãããŸããã æ£ãè² ãã«ããããããããã¯ã€ã³ãã¯ãµãŒã®ååšããã§ãã¯ããã®ã§ã¯ãªããã«ãŠã³ãããã§ãã¯ããã®ãšåãã§ãã
Assert.That(new[] { 1, 2, 2 }, Has.ItemAt(3));
Assert.That(new[] { 1, 2, 2 }, Has.No.ItemAt(3));
èããæéãå¢ãããŸã§ãExistså¶çŽãåé€ããã®ãæãå®å
šãªããã§ãã ã€ã³ãã¯ãµãŒã®ååšãã§ãã¯ã®ããã«Has.Indexer(typeof(Type1), typeof(Type2), ...)
å¥ã®åé¡ãéããå®éã«ã€ã³ãã¯ãµãŒãå®è¡ããŠçµæã®å€ã«ã€ããŠäž»åŒµããããã«Has.ItemAt(arg1, arg2, ...)
ãéãããšããå§ãããŸãã
å¶çŽã解決ããªããšããŠæåã«Has.ItemAt(3)
ãåºè·ãã解決ãããšããŠHas.ItemAt(3).EqualTo(4)
ãåºè·ããããšã«å察ãã人ã¯ããŸããïŒ
Has.Indexer
ã¯ç§ã«ã¯çã«ããªã£ãŠããŸãã ä»ã®å¶çŽãšã®äžè²«æ§ãä¿ã€ããã«ã Has.Indexer<T>()
ã Has.Indexer<T1, T2>()
ãªã©ããµããŒããããšæããŸãã
ãã£ãŒãããã¯ããå¯ãããã ãããããšãããããŸãïŒ Has.ItemAtïŒ...ïŒãèªå·±è§£æ±ºããªãããã«ããããã«ããã«ãªã¯ãšã¹ãã§ãŽãŒãµã€ã³ãåºãã Has.Indexer
ã远跡ããããã«https://github.com/nunit/nunit/issues/3690ãæåºããŸããHas.Indexer
ãã®æ©èœãæäŸããããã®
æãåèã«ãªãã³ã¡ã³ã
ãããŠãè³éççŽã«é¢ããŠã¯ãããã®èª°ããNUnitã«åãçµãã§çŽ$ 0ã®å¹Žä¿žã皌ãã§ããã®ã§ãç§ãã¡ã¯çåãè³éççŽã«ãããšæããŸãð