我有一个使用Microsoft Enterprise Library的项目,并使用配置为缓存管理器指定类型.
以这种方式高速缓存管理器加载取决于文库Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging.dll,其被包含在我的测试项目作为参考,但库不被直接的代码中使用(在编译时间).因此,编译的mytests.dll将不会引用该库(使用dotpeek验证).
问题1:为什么MSTest不将这样的库复制到temp文件夹进行测试? 问题2:有一个优雅的解决方法吗?
不优雅的解决方案#1:对包含的库进行虚拟引用(如本主题中所述);
或解决方案#2:使用MSTest Deploy配置显式包含库.
解决方案#3:
即使关闭了部署选项,在mstest中使用.testsettings文件也可以解决问题.即testsettings文件包含:
<Deployment enabled="false">
</Deployment>
Run Code Online (Sandbox Code Playgroud)
看起来这样做会导致mstest不在临时TestResults\user_HOST 2011-12-21 15_22_08\Out目录中运行,而是在bin\Debug(正确部署所涉及的库)中运行.
这是mstest的预期行为吗?我的意思是,如果在.testsettings文件中禁用了部署,mstest不使用临时目录?
我有一个方法:
public ??? AuthManager.Login(Credentials credentials)
Run Code Online (Sandbox Code Playgroud)
以下是此方法的一组有效输出值:
根据返回类型,向用户显示不同的视图(是的,AccountLockedOut的视图与InvalidPassword不同).
我可以选择:
public class LoginAttemptResult {
public bool Succeeded { get; set; }
public AccountId AccountId { get; set; } // for when success
public LoginAttemptResultEnumType Result { get;set; } // Success, Lockedout, UsernameNotFound, InvalidPassword
public int FailedAttemptCount { get; set; } // only used for InvalidPassword
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个并寻找更好的解决方案.首先,这导致部分初始化的对象,其中两个违反了接口隔离原则,三个违反了SRP.
更新:抛出异常也不是一个优雅的解决方案,因为InvalidPassword我认为这不是一个例外.数据库连接失败是一个例外.空参数是一个例外.InvalidPassword是一个有效的预期回应.
我认为更好的解决方案是创建类的层次结构:
abstract class LoginAttemptResult
sealed class LoginSuccess : LoginAttemptResult { AccountId }
abstract class …Run Code Online (Sandbox Code Playgroud) 我试图将一个结构从C#传递到C++库.我将结构作为对象传递,C++函数将它作为指针(void*).
我有问题通过结构.
[DllImport("MockVadavLib.dll", CharSet = CharSet.Ansi)]
public static extern IntPtr TheFunction([MarshalAs(UnmanagedType.LPStruct)] UserRec userRec);
Run Code Online (Sandbox Code Playgroud)
这是我得到的运行时异常文本:
"无法封送'参数#1':无效的托管/非托管类型组合(此值类型必须与Struct配对)."
虽然我发现了一篇在这种情况下使用LPStruct的MSDN文章.
这是我试图编组的结构:
[StructLayout(LayoutKind.Sequential)]
public struct UserRec {
[MarshalAs(UnmanagedType.I4)]
public int userParam1;
}
Run Code Online (Sandbox Code Playgroud)
这是C++函数:
MOCKVADAVLIB_API tVDACQ_CallBackRec * TheFunction(void * userParams) {...
Run Code Online (Sandbox Code Playgroud) 我希望以下代码将我的跨度放在按钮的左上角,但事实并非如此.这是为什么?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<style type='text/css'>
</style>
</head>
<body>
<button style='height:100px;width:100px;position:relative;'>
<span style='position:absolute;top:0;left:0;'>text</span>
</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
<span>是相对于垂直中间线放置(3px填充我无法解释).
更换<button>用<div> 做地<span>在左上角.
问题:为什么按钮内的绝对定位(位置:相对)与使用布局的行为不同<div>?我该如何解决?
背景:我在按钮内使用两个绝对定位的div来创建一个带圆角的浮动宽度按钮.
编辑: 重要 IE 8.0完全按照我的预期工作(跨越左上角),我看到的问题是在Firefox(3.6.6)中.
只有在验证存在无效数字(通过调用另一种方法)时,才会调用以下方法.如何throw在以下代码段中测试-line?我知道一种方法可能是将VerifyThereAreInvalidiDigits这种方法合并在一起.我正在寻找任何其他想法.
public int FirstInvalidDigitPosition {
get {
for (int index = 0; index < this.positions.Count; ++index) {
if (!this.positions[index].Valid) return index;
}
throw new InvalidOperationException("Attempt to get invalid digit position whene there are no invalid digits.");
}
}
Run Code Online (Sandbox Code Playgroud)
我也不想写一个单元测试来运行永远不会被执行的代码.
我有一个javascript需要大约2秒钟来执行(复杂的优化算法).我想在函数的开头将某个范围设置为"working ...".我发现直到函数结束时,跨度才会改变.
如何强制DOM更改传播?或者我应该一起解决这个问题?
我通过onclick按钮调用该功能.
功能如下:
function optimize() {
$('#status').text('working...');
// calculate for 2 seconds
$('#status').text('done!');
}
Run Code Online (Sandbox Code Playgroud) 有时我想加入两个字符串,中间有一个空格.但是如果第二个字符串为null,我不想要空格.
考虑以下代码:
void AssertFoo(bool cond, string message = null) {
...
Assert.Fail("Something is foo.{0}", message != null ? " " + message : "");
...
}
Run Code Online (Sandbox Code Playgroud)
有更优雅的方式吗?
.净
我有一个Web服务,消息的一个数据成员实现IXmlSerializable,当我执行"添加服务引用"时,该成员成为DataSet.
我试图将序列化Expression<TDelegate>作为参数传递给Web服务.
问:如何在客户端DataSet进行IXmlSerializable实例化?
SQL Server 2008 Ent ASP.NET MVC 2.0 Linq-to-SQL
我正在建立一个游戏网站,跟踪特定玩家(香椿)何时击落某个怪物(老板).表看起来像:
int ToonId
int BossId
datetime LastKillTime
Run Code Online (Sandbox Code Playgroud)
我使用3d派对服务给我回来最新信息(香椿,老板,时间).
现在我想用这个新信息更新我的数据库.
蛮力方法是逐行upsert.但它看起来很丑(代码方面),也可能很慢.
我认为更好的解决方案是插入新数据(使用临时表?)然后运行MERGE语句.
这是好主意吗?我知道临时表是"更好避免".我应该为此操作创建一个永久的"临时"表吗?
或者我应该只读取整个当前集(最多100行),合并并从应用程序中重新放回?
任何指针/建议总是受到赞赏.
我已将两个文件添加到解决方案中的文件夹中,但不在解决方案树中(它位于包文件夹中):
a.dll
a.dll.txt
当我在团队资源管理器上进行"检测到的更改" - 待更改时,在列表中我看到a.dll.txt但a.dll文件不存在.
我确实检查了所有相关.tfignore文件,以确保.dll不排除.
问题是:什么是从检测到的更改中过滤出dll文件?
c# ×5
.net ×1
css ×1
css-position ×1
dataset ×1
html ×1
javascript ×1
jquery ×1
linq-to-sql ×1
merge ×1
mstest ×1
oop ×1
pinvoke ×1
testing ×1
tfs2012 ×1
unit-testing ×1
wcf ×1