我正在编写一个依赖于扩展方法结果的测试,但我不希望该扩展方法的未来失败会破坏此测试.模拟这个结果似乎是显而易见的选择,但是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可能会被蒙住眼睛和醉酒,但我们的预算不会很快增加.
我有一个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) 我正在创建一个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) 我正在制作一个自动脚本来从发布最新编译代码的站点读取列表.这是我已经想到的部分.该脚本的下一部分是从具有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安全通道建立信任关系."
我知道我错过了什么,但我无法找到正确的搜索方式.
如果我通过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)
为什么如果通过Javascript设置CSS颜色,那么数字会改变?
为什么这段代码会在明天的日期返回?
由于我们是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)
我正在尝试将方法列表存储在 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]);,错误消息如下所示 -
“找不到编译动态表达式所需的一种或多种类型。是否缺少引用?”
我该如何进行这项工作?
编辑:我还在寻找一种方法,通过参数向每个函数添加重载方法。
我正在学习厨师,在尝试安装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) 我已经按照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) 我试图计算在循环中键入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) c# ×4
google-glass ×2
javascript ×2
moq ×2
chef-infra ×1
chef-recipe ×1
chromium ×1
cookbook ×1
css ×1
date ×1
expression ×1
google-gdk ×1
java ×1
linq ×1
mocking ×1
parameters ×1
powershell ×1
unit-testing ×1