小编dis*_*ame的帖子

如何使用Moq模拟扩展方法?

我正在编写一个依赖于扩展方法结果的测试,但我不希望该扩展方法的未来失败会破坏此测试.模拟这个结果似乎是显而易见的选择,但是Moq似乎没有提供一种覆盖静态方法的方法(扩展方法的要求).与Moq.Protected和Moq.Stub有类似的想法,但它们似乎没有为这种情况提供任何东西.我错过了什么或者我应该以不同的方式去做这件事吗?

这是一个简单的例子,通常会对"不可覆盖的成员的无效期望"失败.这是需要模拟扩展方法的一个不好的例子,但它应该这样做.

public class SomeType {
    int Id { get; set; }
}

var ListMock = new Mock<List<SomeType>>();
ListMock.Expect(l => l.FirstOrDefault(st => st.Id == 5))
        .Returns(new SomeType { Id = 5 });
Run Code Online (Sandbox Code Playgroud)

至于任何可能建议我使用Isolator的TypeMock迷们:我很欣赏这项努力,因为看起来TypeMock可能会被蒙住眼睛和醉酒,但我们的预算不会很快增加.

c# extension-methods moq mocking

79
推荐指数
4
解决办法
6万
查看次数

表达式引用不属于模拟对象的方法

我有一个api服务,调用另一个API服务.当我设置Mock对象时,它失败并出现错误:

NotSupportedException:expression引用不属于模拟对象的方法.

这是代码:

private Mock<IEnumerable<ICarrierApiService<AccountSearchModel>>> _mockCarrierService;
private Mock<IApiService<AccountSearchModel>> _mockApiService;

[SetUp]
public void SetUp()
{
  _mockApiService = new Mock<IApiService<AccountSearchModel>>();
  _mockCarrierService = new Mock<IEnumerable<ICarrierApiService<AccountSearchModel>>>();
  _mockApiService.Setup(x => x.GetFromApiWithQuery(It.IsAny<string>())).Returns(ApiValue());

  // Error occurred when call _mockApiService.GetFromApiWithQuery() in .Select()
  _mockCarrierService.Setup(x => x
            .Select(s => s
                .GetFromApiWithQuery(It.IsAny<string>())).ToList())
                .Returns(new List<IQueryable<AccountSearchModel>> { ApiValue() });
}
Run Code Online (Sandbox Code Playgroud)

用Moq阅读表达式测试,但它对我的情况不起作用.如果我删除它_mockCarrierService.Setup(),测试用例可以运行但是失败,NullReferenceException因为它没有有效的List<IQueryable<AccountSearchModel>>设置.

知道我怎么能做到这一点?


脚注:当前的解决方案

FWIW,这是我目前使用的解决方案.我很乐意更好地解决这个问题(直到Moq开始支持模拟扩展方法).

private List<ICarrierApiService<AccountSearchModel>> _mockCarrierService;
private AccountSearchController _mockController;
private Mock<ICarrierApiService<AccountSearchModel>> _mockApiService;

[SetUp]
public void SetUp()
{
   _mockApiService = …
Run Code Online (Sandbox Code Playgroud)

c# linq unit-testing expression moq

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

Visual Studio项目模板$ safeitemname $无法按预期工作

我正在创建一个Visual Studio Item模板来创建一些依赖于'容器'文件的文件.

最后一个文件<ProjectItem SubType="Code" TargetFileName="$fileinputname$\I$fileinputname$ View.cs" ReplaceParameters="true">Container View.cs</ProjectItem>创建一个需要特定模型类型的视图接口.但是$safeitemname$参数没有像我预期的那样工作.

输出容器View.cs文件:

public interface IIMy_Triplet_View : IView<IMy_Triplet_View_Model>
{
}
Run Code Online (Sandbox Code Playgroud)

预期:

public interface IMy_Triplet_View : IView<My_Triplet_Model>
{
}
Run Code Online (Sandbox Code Playgroud)

这是Container View.cs模板的源代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WebFormsMvp;

namespace $rootnamespace$
{
    public interface $safeitemname$_View : IView<$safeitemname$_Model>
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

和.vstemplate文件

    <VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
      <TemplateData>
        <DefaultName>Model-View-Presenter</DefaultName>
        <Name>Model-View-Presenter</Name>
        <Description>Creates a model-view-presenter triplet</Description>
        <ProjectType>CSharp</ProjectType>
        <SortOrder>10</SortOrder>
        <Icon>__TemplateIcon.png</Icon>
        <PreviewImage>__PreviewImage.png</PreviewImage>
      </TemplateData>
      <TemplateContent>
        <References>
          <Reference>
            <Assembly>WebFormsMvp</Assembly>
          </Reference>
        </References>
        <ProjectItem SubType="Code" …
Run Code Online (Sandbox Code Playgroud)

c# parameters visual-studio visual-studio-templates

10
推荐指数
1
解决办法
3489
查看次数

用于下载文件的Powershell脚本,无法设置安全连接

我正在制作一个自动脚本来从发布最新编译代码的站点读取列表.这是我已经想到的部分.该脚本的下一部分是从具有Untrusted Cert的服务器中获取该编译代码.

这就是我要抓取文件的方式:

$web = new-object System.Net.WebClient
$web.DownloadFile("https://uri/file.msi", "installer.msi")
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误:

使用"2"参数调用"DownloadFile"的异常:"底层连接已关闭:无法为SSL/TLS安全通道建立信任关系."

我知道我错过了什么,但我无法找到正确的搜索方式.

powershell

8
推荐指数
1
解决办法
6625
查看次数

谷歌眼镜相机自动对焦?

我读过这篇文章,声称谷歌玻璃可以自动对焦.但是,此代码返回false:

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)

我无法在Google Glass Tech规范中找到明确的答案.有谁知道相机是否可以自动对焦?提前致谢.

google-glass google-gdk

8
推荐指数
1
解决办法
1153
查看次数

CSS和javascript中的(Chromium)alpha颜色值(在rgba中)

如果我通过javascript中的rgba(r,g,b,a)将alpha值设置为1以外的任何值,则浏览器设置的实际值略有不同.但CSS中的值设置完全匹配.

请参阅code -pen-site中的代码示例

    <head>    
      <script type="text/javascript" language="javascript">
        window.onload=function() {
        document.getElementById("p1").style["background-color"]="rgba(255,0,0,0.3)";
        }
      </script>
    </head>

    <body>
      <p>RGB colors with opacity:</p>
      <p id="p1">Red</p>
      <p id="p2">Green</p>
    </body>
Run Code Online (Sandbox Code Playgroud)
  1. 使用Chromium浏览器
  2. 按F12激活Inspector
  3. 检查"红色".
  4. "Red"的背景颜色设置为rgba(255,0,0,0.3),但在Inspector中,其值为rgba(255,0,0,0.298039)
  5. "绿色"的背景颜色设置为rgba(0,255,0,0.3),Inspector中的值与之匹配.

为什么如果通过Javascript设置CSS颜色,那么数字会改变?

javascript css chromium

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

toISOString()返回错误的日期

为什么这段代码会在明天的日期返回?

由于我们是8月31日,它必须返回2013-08-31而不是2013-09-01.

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_toisostring

function myFunction() {
  var d = new Date();
  var x = document.getElementById("demo");
  x.innerHTML = d.toISOString();
}
Run Code Online (Sandbox Code Playgroud)
<p id="demo">Click the button to display the date and time as a string, using the ISO
  standard.</p>
<button onclick="myFunction()">Try it</button>
Run Code Online (Sandbox Code Playgroud)

javascript date

5
推荐指数
2
解决办法
7786
查看次数

在 C# Unity3D 中使用 List&lt;&gt; 存储方法?

我正在尝试将方法列表存储在 a 中List<dynamic>以创建我的 Quest 系统的一部分。我从未使用过列表,而且我不太清楚关键字的dynamic作用,所以我在理解上遇到了问题。

首先,我创建了一个测试函数,并尝试将其存储在 中List<dynamic>,然后通过控制台 ( Debug.Log()) 输出测试函数返回的内容。这是代码:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class Quests : MonoBehaviour
{
    public List<dynamic> activeQuests = new List<dynamic>();


    void Start()
    {
        activeQuests.Add(Test());
        Debug.Log(activeQuests[0]);
    }

    public bool Test()
    {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

下方出现一条红线Debug.Log(activeQuests[0]);,错误消息如下所示 -

“找不到编译动态表达式所需的一种或多种类型。是否缺少引用?”

我该如何进行这项工作?

编辑:我还在寻找一种方法,通过参数向每个函数添加重载方法。

c# unity-game-engine

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

厨师:没有名为"httpd"的公式

我正在学习厨师,在尝试安装httpd包时我遇到了困难.我有一个简单的方法在Mac OS上安装httpd包.我安装了ChefDK.

webserver.rb

package 'httpd' 
Run Code Online (Sandbox Code Playgroud)

当我跑chef-apply webserver.rb,它会抛出错误:

    Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of brew info --json=v1 httpd ----
STDOUT: 
STDERR: Error: No available formula with the name "httpd"
---- End output of brew info --json=v1 httpd ----
Ran brew info --json=v1 httpd returned 1

Resource Declaration:
---------------------
# In webserver.rb

  1: package 'httpd'

Compiled Resource:
------------------
# Declared in webserver.rb:1:in `run_chef_recipe'

homebrew_package("httpd") do
  action [:install]
  retries 0
  retry_delay 2 …
Run Code Online (Sandbox Code Playgroud)

cookbook chef-infra chef-recipe

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

本地部署Glass Java启动项目,AuthFilter ClassNotFoundException

我已经按照Java快速入门中的步骤进行了操作.尝试在本地部署时,我得到以下堆栈跟踪:

Jun 6, 2013 9:53:14 AM com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml
INFO: Successfully processed /home/derek/dev/external/git/mirror-quickstart-java/web/WEB-INF/appengine-web.xml
Jun 6, 2013 9:53:14 AM com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
INFO: Successfully processed /home/derek/dev/external/git/mirror-quickstart-java/web/WEB-INF/web.xml
Jun 6, 2013 9:53:14 AM com.google.apphosting.utils.jetty.JettyLogger info
INFO: Logging to JettyLogger(null) via com.google.apphosting.utils.jetty.JettyLogger
Jun 6, 2013 9:53:15 AM com.google.apphosting.utils.jetty.JettyLogger info
INFO: jetty-6.1.x
Jun 6, 2013 9:53:15 AM com.google.apphosting.utils.jetty.JettyLogger warn
WARNING: EXCEPTION 
java.lang.ClassNotFoundException: com.google.glassware.AuthFilter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:215)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at org.mortbay.util.Loader.loadClass(Loader.java:91)
    at org.mortbay.util.Loader.loadClass(Loader.java:71)
    at org.mortbay.jetty.servlet.Holder.doStart(Holder.java:73)
    at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:81)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at …
Run Code Online (Sandbox Code Playgroud)

google-glass google-mirror-api

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

计算每个数字的输入次数

我试图计算在循环中键入0到9之间的每个数字的次数,当按-1它将停止循环,我使它长期工作,我还要打印哪些数字是打字的最多.现在我只有couting代码:

int pickedNum,counter_0=0,counter_1=0,counter_2=0,counter_3=0,counter_4=0,counter_5=0,counter_6=0,counter_7=0,counter_8=0,counter_9=0;
do{
    System.out.println("Please enter a numbr between 0-9 , -1 to exit:");
    pickedNum=s.nextInt();
    if(pickedNum==0){
        counter_0++;
    }
    if(pickedNum==1){
        counter_1++;
    }
    if(pickedNum==2){
        counter_2++;
    }
    if(pickedNum==3){
        counter_3++;
    }
    if(pickedNum==4){
        counter_4++;
    }
    if(pickedNum==5){
        counter_5++;
    }
    if(pickedNum==6){
        counter_6++;
    }
    if(pickedNum==7){
        counter_7++;
    }
    if(pickedNum==8){
        counter_8++;
    }
    if(pickedNum==9){
        counter_9++;
    }
}
while(pickedNum != -1);
System.out.printf("The number 0 appears: %d \n"
        + "The number 1 appears: %d \n"
        + "The number 2 appears: %d \n"
        + "The number 3 appears: %d \n"
        + "The number 4 …
Run Code Online (Sandbox Code Playgroud)

java

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