小编Jam*_*com的帖子

BDD场景应该包含实际测试数据,还是只描述一下?

我们已经意识到在定义典型的CRUD场景时有两种指定测试数据的选项:

选项1:描述要使用的数据,并让实现定义数据

Scenario: Create a region
    Given I have navigated to the "Create Region" page
      And I have typed in a valid name
      And I have typed in a valid code
    When I click the "Save" button
    Then I should be on the "Regions" page
     And the page should show the created region details
Run Code Online (Sandbox Code Playgroud)

选项2:明确说明要使用的测试数据

Scenario: Create a region
    Given I have navigated to the "Create Region" page
      And I have filled out the form as follows
        | Label | …
Run Code Online (Sandbox Code Playgroud)

bdd acceptance-testing gherkin

22
推荐指数
1
解决办法
4610
查看次数

如果我将一个IQueryable转换为IEnumerable,那么调用一个Linq扩展方法,该实现被调用?

考虑以下代码:

IQueryable<T> queryable;

// something to instantiate queryable

var enumerable = (IEnumerable<T>) queryable;

var filtered = enumerable.Where(i => i > 3);
Run Code Online (Sandbox Code Playgroud)

在最后一行中,调用哪个扩展方法?

IEnumerable<T>.Where(...)吗?或者会IQueryable<T>.Where(...)被调用,因为实际的实现仍然显然是可查询的?

据推测,理想的是可以调用IQueryable版本,就像普通多态将始终使用更具体的覆盖一样.

在Visual Studio中,当我右键单击Where方法并"转到定义"时,我被带到IEnumerable版本,从视觉角度来看这是有意义的.

我主要担心的是,如果在我的应用程序的某个地方,我使用Linq到NHibernate来获取Queryable,但是我使用一个使用更通用的IEnumerable签名的接口传递它,我将失去延迟数据库执行的奇迹!


编辑:事实证明,正如Iridium指出的那样,它是被调用的Enumerable版本

public class Program
    {
        static void Main(string[] args)
        {
            var myString2 = new MyString2();
            var myString = (MyString)myString2;
            Console.WriteLine(myString.Method());
            Console.ReadLine();
        }
    }

    public class MyString {}

    public class MyString2 : MyString {}

    public static class ExtensionMethods
    {
        public static string Method(this MyString instance)
        {
            return "MyString method";
        } …
Run Code Online (Sandbox Code Playgroud)

c# linq extension-methods

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

WatiN:在查找文本时,如何获取其包含元素的引用?

给出以下HTML页面:

<html>
<head>
    <title>WatiN Test</title>
</head>
<body>
<div>
    <p>Hello World!</p>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我希望能够搜索一些文本(比方说"World"),并获得对其父元素的引用(在本例中为<p>元素).


如果我试试这个:

var element = ie.Element(Find.ByText(t => t.Contains("World")))
Run Code Online (Sandbox Code Playgroud)

或这个:

var element = ie.Element(e => e.Text != null && e.Text.Contains("World"));
Run Code Online (Sandbox Code Playgroud)

我找回了<html>元素.这与状态的WatiN文档一致Element.Text:"获取此元素的innertext(以及此元素中包含的所有元素的innertext)".

由于页面中的所有文本都包含在<html>元素中,因此我将始终将其返回而不是直接父级.


有没有办法直接在元素下面获取文本(而不是它包含的元素中的文本)?

还有另一种方法吗?

非常感谢.

c# watin

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

标签 统计

c# ×2

acceptance-testing ×1

bdd ×1

extension-methods ×1

gherkin ×1

linq ×1

watin ×1