小编Jus*_*ony的帖子

Linq implicity类型范围变量

使用Linq,范围变量(e)可以从它来自的数组/集合(emps)中隐式输入,但是如果没有var关键字或类型,foreach语句不能做同样的事情.为什么是这样?

在ex1中,编译器知道e是Employee类型,没有给出var关键字或任何东西.为什么ex2中的foreach循环不能做同样的事情,你必须提供类型(无论是var还是某种类型).

EX1.

    Employee[] emps = {new Employee ( 1, "Daniel", "Cooley", 7, 57.98M };

    public void SortByLastname()
    {
      var sortedByLastname =
            from e in emps
            orderby e.LastName
            select e.FirstName;
    }
Run Code Online (Sandbox Code Playgroud)

EX2.

        foreach (Employee empl in emps)
        {
            Console.WriteLine("Employee " + empl);
        }
Run Code Online (Sandbox Code Playgroud)

这可能是过度分析,但我试图找到原因的底部.

答案很可能是Linq查询语法被设置为自动推断范围变量的类型而foreach语句不是.有人可以帮助解释为什么会这样吗?

c#

7
推荐指数
2
解决办法
2049
查看次数

如何重复Specflow Scenario Outline中的步骤

简而言之,我需要的是创建一个Scenario Outline,其中包含一个可重复的步骤,而不必使用多个AND键入它,如下所示:

Scenario Outline: outline
    Given I am a user
    When I enter <x> as an amount
       And I enter <x2> as an amount
    Then the result should be <result>
Scenarios:
    |x|x2|result|
    |1|2 |3     |
    |1|0 |1     |
Run Code Online (Sandbox Code Playgroud)

但是,我想做类似以下的事情:

Scenario Outline: outline 
    Given I am a user
    When I enter <Repeat: x> as an amount
    Then the result should be <result>

Scenarios:
    |x    |result|
    |1,2,3|6     |
    |1,2  |3     |
Run Code Online (Sandbox Code Playgroud)

基本上,我希望"我输入金额"分别运行3次和2次.

我发现这个问题的最接近的是如何重新运行具有不同参数的黄瓜场景轮廓?,但我想在放弃并使用带有逗号分隔列表或类似内容的StepArgumentTransformation之前仔细检查.

我最后的答案更像是这样的:

Scenario Outline: outline 
    Given I am …
Run Code Online (Sandbox Code Playgroud)

specflow

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

如何获得Jekyll Bootstrap的绝对路径

我试图将一个facebook共享链接添加到jekyll引导程序页面,但是当添加FB将在我使用的共享中使用的href时{{ HOME_PATH }}.这结果是/的相对路径(但是FB不理解).有人知道如何获得绝对路径而不必硬编码吗?

给出/的代码

<a name="fb_share" type="button"
           share_url="{{ HOME_PATH }}">Share this event on Facebook</a>
Run Code Online (Sandbox Code Playgroud)

liquid jekyll twitter-bootstrap

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

通过名称获取实体

假设我有一个EF实体名称的清单,例如:

List<string> entityNames = new List<string>(){
    "Table1",
    "Table2",
    "Table3"
};
Run Code Online (Sandbox Code Playgroud)

从这个实体列表中,我想分别查询每个实体,类似于:

var result = efContext.Table1.Where(t => ...);
Run Code Online (Sandbox Code Playgroud)

使用反射或黑魔法,我将如何获得对实际实体的引用,以便完成以下工作:

foreach(var e in entityNames)
{
    var entity = efcontext.GetType().GetProperties().Where(t => t.Name == e).Single();
    var result = efContext.entity.Where(t => ...);
}
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

c# reflection entity-framework

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

使用构造函数参数Mock.Of <T>

我有一个我正在使用的具体类Mock.Of,但它没有默认的构造函数.有没有办法让这个工作无需接口或使用new Mock?前者在这个时候是矫枉过正,而后者则更加丑陋.我将尝试创建一个返回a的扩展方法new Mock().Object,但我不认为这Mock.Get将在该方案中起作用

c# moq .net-4.0

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

带有列表或参数的TestCase

我正在尝试编写一个带有字符串的测试用例,并期望将字符串拆分.我不能初始化ListTestCase,所以我尝试使用TestCaseSource一个params说法,但是我得到的

提供的参数数量错误

我有什么方法可以实现我的最终目标吗?

public IEnumerable<TestCaseData> blah
{
 get
 {
  yield return new TestCaseData("hello World", "h", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d");
 }
}

[TestCaseSource("blah")]
public void testmethod(String orig, params String[] myList)
Run Code Online (Sandbox Code Playgroud)

c# nunit testcase testcasedata

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

单元测试跟踪状态的类

我正在抽象一类我的历史跟踪部分,所以它看起来像这样:

private readonly Stack<MyObject> _pastHistory = new Stack<MyObject>();

internal virtual Boolean IsAnyHistory { get { return _pastHistory.Any(); } }

internal virtual void AddObjectToHistory(MyObject myObject)
{
  if (myObject == null) throw new ArgumentNullException("myObject");
  _pastHistory.Push(myObject);
}

internal virtual MyObject RemoveLastObject()
{
  if(!IsAnyHistory) throw new InvalidOperationException("There is no previous history.");
  return _pastHistory.Pop();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我想单元测试Remove会返回最后添加的对象.

  • AddObjectToHistory
  • RemoveObjectToHistory - >返回放入via的内容 AddObjectToHistory

但是,如果我必须先调用Add,它不是真正的单元测试吗?但是,我可以看到以真正的单元测试方式执行此操作的唯一方法是在构造函数中传递Stack对象或模拟出IsAnyHistory...但是模拟我的SUT也很奇怪.所以,我的问题是,从教条的角度来看,这是一个单元测试吗?如果没有,我该如何清理它...是构造函数注入我唯一的方法?它似乎只是需要传递一个简单的对象?是否可以将这个简单的物体推出注入?

.net c# state unit-testing

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

nginx反向代理未检测到已删除的负载均衡器

我们的反向代理具有以下配置:

location ~ ^/stuff/([^/]*)/stuff(.*)$ {
    set $sometoken $1;
    set $some_detokener "foo";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Authorization "Basic $do_token_decoding";
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_redirect https://place/ https://place_with_token/$1/;
    proxy_redirect http://place/ http://place_with_token/$1/;
    resolver 10.0.0.2 valid=10s;
    set $backend https://real_storage$2;
    proxy_pass $backend;
}
Run Code Online (Sandbox Code Playgroud)

现在,所有这些工作都可以进行,直到real_storage旋转服务器为止。例如,say real_storage来自foo.com。这是一个负载均衡器,可直接连接到两个服务器:1.1.1.1和1.1.1.2。现在,将1.1.1.1删除并替换为1.1.1.3。但是,nginx继续尝试1.1.1.1,导致:

epoll_wait()报告客户端过早关闭了连接,因此在连接到上游时,上游连接也关闭了,客户端:...,服务器:...,请求:“ GET ... HTTP / 1.1”,上游:“ https: // 1.1.1.1:443 / ...“,主持人:” ...“

请注意,上游是旧服务器,如先前的日志所示:

[调试] 1888#1888:* 570837连接到1.1.1.1:443,FD:60#570841

这是在我们这边还是为我们的主机配置错误的东西real_storage

*我能发现的最接近我的问题的地方是https://mailman.nginx.org/pipermail/nginx/2013-March/038119.html ...

更多详情

我们添加了 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 …

nginx nginx-reverse-proxy

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

TemplateBinding不适用于文本框文本

我有一个自定义控件EnhancedTextBox,它是一个具有a TextBox和a 的UserControl Button.对于消费者我希望它看起来大部分看起来像TextBox,所以我做了以下事情:

<UserControl.Template>
    <ControlTemplate TargetType="textBoxes:EnhancedTextBox">
    ...
    <TextBox Text="{TemplateBinding Text}"...
Run Code Online (Sandbox Code Playgroud)

在EnhancedTextBox我有

public static readonly DependencyProperty TextProperty =
  DependencyProperty.Register("Text", typeof (String), typeof (EnhancedTextBox));

public String Text
{
  get { return (String) GetValue(TextProperty); }
  set { SetValue(TextProperty, value); }
}
Run Code Online (Sandbox Code Playgroud)

然而,当我使用它时如下:

<EnhancedTextBox Text="{Binding MyText, Mode=TwoWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}}" />
Run Code Online (Sandbox Code Playgroud)

然后,MyText永远不会更新,我检查EnhancedTextBox.Text,它是null.我错过了什么?我一直盯着这一点,无法弄清楚出了什么问题.我甚至认为可能是因为我使用的是同一个名字,所以创建一个叫做Text1无效的属性....

另外值得注意的是,如果我使用常规TextBox,那么这一切都有效.所以,我相当肯定问题在于EnhancedTextBox它自身

.net c# wpf dependency-properties templatebinding

5
推荐指数
1
解决办法
2736
查看次数

使用 nginx 重定向到 docker 注册表

我想要做的就是控制顶部端点(用户将在其中登录和拉取图像的 MY_ENDPOINT。正在托管注册表和容器(DOCKER_SAAS),所以我需要的只是一个看似简单的重定向。具体来说,您通常会这样做:

docker login -u ... -p ... DOCKER_SAAS
docker pull DOCKER_SAAS/.../...
Run Code Online (Sandbox Code Playgroud)

我想允许:

docker login -u ... -p ... MY_ENDPOINT
docker pull MY_ENDPOINT/.../...
Run Code Online (Sandbox Code Playgroud)

甚至更理想的是,我更喜欢:

docker login MY_ENDPOINT
docker pull MY_ENDPOINT/.../...
Run Code Online (Sandbox Code Playgroud)

最后一项的不同之处在于端点包含用户名和密码的散列版本,它被设置到一个Authorization标题中(使用Basic) - 所以用户甚至不需要担心用户名和密码,只需担心他们的 URL。我已经尝试了一个,proxy_pass因为我们已经在为基本打包(使用 HTTPS)做了,但是失败了 404(部分是因为我们不处理 /v2 - 我还需要重定向它吗?)。这让我找到了https://docs.docker.com/registry/recipes/nginx/,但这似乎只有在您托管注册表时才有意义。我正在尝试做的甚至可能吗?

reverse-proxy nginx docker nginx-reverse-proxy

5
推荐指数
1
解决办法
751
查看次数