我想我可能对Moq Callback方法的语法有点困惑.当我尝试做这样的事情时:
IFilter filter = new Filter();
List<IFoo> objects = new List<IFoo> { new Foo(), new Foo() };
IQueryable myFilteredFoos = null;
mockObject.Setup(m => m.GetByFilter(It.IsAny<IFilter>()))
.Callback( (IFilter filter) => myFilteredFoos = filter.FilterCollection(objects))
.Returns(myFilteredFoos.Cast<IFooBar>());
Run Code Online (Sandbox Code Playgroud)
这会引发异常,因为myFilteredFoos在Cast<IFooBar>()调用期间为null .这不符合我的预期吗?我认为FilterCollection会被调用,然后myFilteredFoos将是非null并允许演员.
FilterCollection是不是能够返回一个null,它使我得出它没有被调用的结论.另外,当我这样声明时myFilteredFoos:
Queryable myFilteredFoos;
Run Code Online (Sandbox Code Playgroud)
Return调用抱怨myFilteredFoos可以在初始化之前使用.
我不确定这是否是一件奇怪的事情,或者是否有一些代码闻起来...但我想知道是否有某种方式(某种oop模式会很好)来"施放"基类型到其派生类型的形式.我知道这没有多大意义,因为派生类型将具有父级不提供的附加功能,这在其本身并非基本健全.但有没有办法做到这一点?这是一个代码示例,以便我可以更好地解释我在问什么.
public class SomeBaseClass {
public string GetBaseClassName {get;set;}
public bool BooleanEvaluator {get;set;}
}
public class SomeDerivedClass : SomeBaseClass {
public void Insert(SqlConnection connection) {
//...random connection stuff
cmd.Parameters["IsItTrue"].Value = this.BooleanEvalutar;
//...
}
}
public static void Main(object[] args) {
SomeBaseClass baseClass = new SomeBaseClass();
SomeDerivedClass derClass = (SomeDerivedClass)baseClass;
derClass.Insert(new sqlConnection());
}
Run Code Online (Sandbox Code Playgroud)
我知道这似乎很傻,但有没有办法完成这种事情?
在寻求本地化的过程中,我需要在源代码中找到所有字符串文字.我正在寻找一种方法将其编入脚本修改后的源库检查.(IE之后有人检查了一些东西,有一个盒子设置来检查这个统计数据)我可能会使用NAnt和CruiseControl或其他东西来处理CVS的管理(在我的情况下,StarTeam很好:()但是你知道任何可编写脚本的吗? (或命令行)实用程序,以准确循环通过源代码寻找字符串文字?我意识到我可以根据正则表达式进行简单的字符串查找,但想要更多的帮助.(也许分析字符串或将其分类)因为很多时候字符串可能不一定需要翻译.任何想法?
我只是想从运行Selenium的人那里得到一些意见(http://selenium.openqa.org)我在WaTiN方面有很多经验,甚至还为它写了一套录音套件.我有它生成一些结构良好的代码,但只是由我维护,似乎我的公司几乎放弃了它.如果你已经运行了硒,你有很多成功吗?我将使用.NET 3.5,Selenium能很好地使用它吗?生成的代码是干净的还是只是所有交互的列表?(http://blogs.conchango.com/richardgriffin/archive/2006/11/14/Testing-Design-Pattern-for-using-WATiR_2F00_N.aspx)分布式测试套件的公平性如何?
任何其他抱怨或赞美系统将不胜感激!
我正在尝试将VC6 COM DLL添加到我们的VS2010RC C#解决方案中.使用VC6工具编译DLL以创建x86版本,并使用VC7跨平台工具编译以生成VC7 DLL.
只要消耗C#项目的平台设置为x86,组件的x86版本就可以正常工作.DLL的x64或x86版本是否实际注册无关紧要.它适用于两者.如果平台设置为"任何CPU",我会收到一个BadImageFormatException负载Interop.<name>.dll.
至于x64版本,我甚至无法构建项目.我收到tlbimp错误:
TlbImp:错误TI0000:必须指定与输入类型库兼容的单个有效机器类型.
有没有人见过这个问题?
编辑:
我已经做了很多深入研究这个问题,并认为这可能是一个Visual Studio错误.我有一个干净的解决方案.我引入了我的COM程序集,选择了与语言无关的"任何CPU".生成的Interop DLL的过程体系结构是x86而不是MSIL.
可能必须手工制作Interop才能使其工作.
如果有人有其他建议,请告诉我.
将.NET方法作为代理回调传递给PowerShell中的.NET对象的语法是什么?
例如:
C#:
public class Class1
{
public static void MyMethod(Action<object> obj)
{
obj("Hey!");
}
}
public class Class2
{
public static void Callback(object obj)
{
Console.Writeline(obj.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
电源外壳:
[Class1]::MyMethod([Class2]::Callback)
Run Code Online (Sandbox Code Playgroud)
这不起作用.
在.NET中,您应该将单元测试项目与其余解决方案放在一起吗?或者是否应该有一个包含所有测试项目的测试解决方案?
我们的代码库解决方案中包含所有测试项目......看起来有点麻烦.
你平常都做什么?
我有一个针对.NET v3.5的2010项目.令人费解的是,我无法再构建v3.5项目.该项目没有添加任何参考.它甚至不会让我添加对System.Core的引用,因为它是由"构建系统"添加的.
警告CS1685:预定义类型'System.Func'在全局别名中的多个程序集中定义; 使用'c:\ Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll'中的定义
IFilter.cs(82,49):错误CS0433:类型'System.Func'存在于'c:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'和'C:\ WINDOWS\Microsoft.NET \框架\ v4.0.30319\mscorlib.dll中'
看起来有些东西正在抓住4.0但我不太确定如何修复它.还有其他人碰到这个吗?
同事有同样的问题.重新安装Windows以解决问题
我在这个问题上打开了一个错误:https://connect.microsoft.com/VisualStudio/feedback/details/558245/warning-cs1685-when-compiling-a-v3-5-net-application-in-visual-工作室2010
如果编译器设置为verbose,我会看到:
FrameworkPathOverride = C:\ Windows\Microsoft.NET\Framework\v4.0.30319
其定义为:
指定mscorlib.dll和microsoft.visualbasic.dll的位置.此参数等效于vbc.exe编译器的/ sdkpath开关.
其他一些有趣的花絮:我一起创建了一个新项目,根本无法构建v3.5.我可以毫无问题地构建2.0,3.0,3.5客户端配置文件,4.0和4.0客户端配置文件.VB.NET可以构建v3.5但C#不能.我尝试重新安装.NET 3.5,4.0和Visual Studio 2010但没有成功.Visual Studio调试日志没有显示任何有趣的安全模式不起作用.
试图避免重新安装Windows ...
重新安装了好几次.Visual Studio卸载不会自行清理.我已经开发了一个虚拟机来开发,直到我有机会重新安装我的主操作系统.
WPF中发生的奇怪事件...当我将事件设置为MouseUp时,我可以在右键单击按钮时触发它.但这不会随着点击而发射!
<Button MouseLeftButtonUp="btnNewConfig_MouseUp" Name="btnNewConfig">
<StackPanel Orientation="Horizontal">
<Image Source="Icons\new.ico" Height="24" Width="24" Margin="5"/>
<TextBlock VerticalAlignment="Center">New</TextBlock>
</StackPanel>
</Button>
Run Code Online (Sandbox Code Playgroud)
我知道这很可能很简单.谢谢您的帮助!
托管PowerShell运行时是否可以将PSObject其转换回原始类型?
例如:
我有一个cmdlet调用WriteObject并推送管道中的ClassXzy集合.当我PowerShell.Invoke从主机端调用时,我检索PSObject带有BaseObject属性的s 集合.铸造BaseObject于ClassXyz失败.
有没有办法将每个属性值映射到其对应的原始对象?
我假设PowerShell以某种方式执行此操作,因为您可以将PSObjects 传递给cmdlet并将它们转换为参数类型.但是怎么样?
我花时间用反射器撕裂了PS组件,但还没有真正确定这种魔法是如何发生的.
有任何想法吗?
编辑:我忘记了一个非常重要的细节.在PSObject我正在测试对,因此是一个远程对象BaseObject类型命名Deserialized.ClassXyz.这就是我看到这种奇怪行为的原因.
.net ×5
c# ×5
unit-testing ×3
powershell ×2
.net-3.5 ×1
button ×1
com ×1
delegates ×1
events ×1
inheritance ×1
interop ×1
localization ×1
mocking ×1
moq ×1
oop ×1
selenium ×1
solution ×1
string ×1
ui-testing ×1
visual-c++-6 ×1
wpf ×1