我们正在使用VMWare和NUnit开发自动化回归测试.我们将测试分为几个步骤,现在我想看看每个步骤的性能回归.像NUnit一样,简单地对测试进行计时似乎并不可靠.我认为接受系数约为15%,但我们的步骤有时会有所不同,超过35%.在这种依赖资源的测试环境中,有没有一致的测试性能方法?"智能"计时系统是我唯一的选择吗?
我意识到这里有一个相关的线程: 加载程序集及其依赖项
但我正在修改一些东西,这并不完全适用.
string path = Path.GetDirectoryName( pathOfAssembly );
Environment.CurrentDirectory = path;
Assembly.Load(Path.GetFileNameWithoutExtension(pastOfAssembly));
Run Code Online (Sandbox Code Playgroud)
你真的有理由这样做吗?使用它不会更有意义吗:
Assembly.LoadFile(pathOfAssembly);
Run Code Online (Sandbox Code Playgroud)
任何见解将不胜感激.
我在注册表中的Run键下有一个进程.它正在尝试访问我在上一个会话中定义的环境变量.我正在使用ExpandEnvironmentStrings来扩展路径中的变量.环境变量是用户配置文件变量.当我在命令行上运行我的进程时,它也不会扩展.如果我调用'set',我可以看到变量.
一些代码......
CString strPath = "\\\\server\\%share%"
TCHAR cOutputPath[32000];
DWORD result = ExpandEnvironmentStrings((LPSTR)&strPath, (LPSTR)&cOutputPath, _tcslen(strPath) + 1);
if ( !result )
{
int lastError = GetLastError();
pLog->Log(_T( "Failed to expand environment strings. GetLastError=%d"),1, lastError);
}
Run Code Online (Sandbox Code Playgroud)
调试时输出路径与Path完全相同.没有返回错误代码.
什么是布莱恩?
我一直在敲我的脑袋......我不能假装成一个C++家伙......
TCHAR * pszUserName = userName.GetBuffer();
SID sid;
SecureZeroMemory(&sid, sizeof(sid));
SID_NAME_USE sidNameUse;
DWORD cbSid = sizeof(sid);
pLog->Log(_T("Getting the SID for user [%s]"), 1, userName);
if (!LookupAccountName(NULL, (LPSTR)pszUserName, &sid, &cbSid, NULL, 0, &sidNameUse))
{
pLog->Log(_T("Failed to look up user SID. Error code: %d"),1, GetLastError());
return _T("");
}
pLog->Log(_T("Converting binary SID to string SID"));
Run Code Online (Sandbox Code Playgroud)
消息"为用户[x]获取SID",但随后应用程序崩溃.我假设是LookupAccountName电话.
编辑:
Whoops userName是一个MFC CString
我假设这是不可能的,但在进一步挖掘之前有办法做这样的事情:
public void ProcessInterface(ISomeInterface obj) {}
//...
dynamic myDyn = GetDynamic<ISomeInterface>()
ProcessInterface(myDyn);
Run Code Online (Sandbox Code Playgroud)
我看过一篇帖子争论它,但听起来它没有被包括在内.
一点上下文:通过COM公开的.Net程序集 - > Silverlight app消耗接口实现类.通过接口引用对象会很好.我真的不希望这是有意的......
我正在研究自定义调试引擎,当我将我的结构编组到IntPtrVisual Studio崩溃时(正在调试的那个崩溃而不是调试器).
我的结构只不过是:
public struct DocumentContext : IDebugDocumentContext2, IDebugCodeContext2
{
private string _fileName;
//.....Implementation of interfaces
}
Run Code Online (Sandbox Code Playgroud)
我的编组代码如下所示:
var documentContext = new DocumentContext(_node.FileName);
var size = Marshal.SizeOf(documentContext);
IntPtr ptrDocContext = Marshal.AllocHGlobal(size);
//This is what is crashing
//I don't have a chance to catch anything, it just craps out
//Event log says faulting dll is nt.dll
Marshal.StructureToPtr(documentContext, ptrDocContext, true);
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
是否有可通过SDK获得的Android handests的唯一ID?
我想提供一个Web服务,其操作只能针对每个用户的每个资源执行一次.也许有不同的方法可以解决这个问题.有任何想法吗?
我们还需要几个月的时间才能重新设计产品的逻辑和业务层.通过利用MEF(依赖注入),我们已经实现了高水平的代码覆盖率,我相信我们拥有非常可靠的产品.由于我们一直在研究一些更复杂的逻辑,我发现单元测试越来越困难.
我们正在利用CompositionContainer来查询这些复杂算法所需的类型.我的单元测试有时难以遵循,因为必须进行冗长的模拟对象设置过程,恰到好处,以允许验证某些情况.我的单元测试通常比我试图测试的代码花费更长的时间来编写.
我意识到这不仅是依赖注入的问题,而且是整个设计的问题.对于我过于复杂的测试,是不是很差的方法设计或缺乏组合?我已经尝试过基类分析测试,创建常用的模拟对象并确保尽可能地利用容器来缓解这个问题,但我的测试总是非常复杂且难以调试.您已经看到哪些提示可以使这些测试简洁,可读且有效?
我知道有很多关于这个的问题已经浮现在SO周围,但是我已经阅读了很多问题但仍然不能让我的第3列与右边对齐.
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#FFFFFF"
android:stretchColumns="2"
>
<TableRow>
<ImageView
android:src="@drawable/blue_light"
android:layout_height="48px"
android:layout_width="48px"
android:padding="3dp"
android:layout_margin="3dp"
android:layout_column="1"/>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10px"
android:layout_gravity="center_vertical"
android:layout_column="2">
<TableRow>
<TextView
android:id="@+id/row_title"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold" />
</TableRow>
<TableRow>
<TextView
android:id="@+id/row_author"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#9E9E9E"
android:textStyle="italic|bold"/>
</TableRow>
</TableLayout>
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="3"
android:layout_gravity="center_vertical|right"
android:gravity="center_vertical|right"
>
<TableRow>
<TextView
android:textColor="#1F9C29"
android:textSize="15dp"
android:id="@+id/row_txt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold" />
</TableRow>
<View
android:layout_height="1dp"
android:background="#000000"
android:layout_marginRight="3dp"
/>
<TableRow>
<TextView
android:textColor="#1B27D1"
android:id="@+id/row_txt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"/>
</TableRow>
</TableLayout>
</TableRow>
</TableLayout>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我对GetLastError和托管C++有一个非常奇怪的问题.从非托管代码转换为托管代码后,GetLastError返回一些非常奇怪的东西.
错误代码:122 - 传递给系统调用的数据区域太小.
另外,传入的strMessage正在向服务器发送它.
非托管功能:
DWORD SendMessage(LPCTSTR strMessage, CString * strResponse)
{
DWORD dwLastError;
BOOL bSuccess = FALSE;
try
{
//some socket code
int ret = recv...
if (ret == SOCKET_ERROR || ret == 0)
{
Log(GetLastError()); //falls into here
Log(WSAGetLastError());
throw "Failed!"
}
bSuccess = TRUE;
}
catch (LPCTSTR pszException)
{
dwLastError = GetLastError();
Log(pszException);
Log(dwLastError );
Log(WSAGetLastError());
}
Log(dwLastError);
SetLastError(dwLastError);
return bSuccess;
}
Run Code Online (Sandbox Code Playgroud)
托管代码:
void SendManagedMessage(String ^ strMessage)
{
CString cstrMessage = (char*) Marshal::StringToHGlobalAnsi(strMessage).ToPointer();
CString cstrResponse;
if …Run Code Online (Sandbox Code Playgroud) 我正在使用PowerShell交易; 这将创建一个具有Serializable的IsolationLevel的CommittableTransaction.问题是,当我在此上下文中执行事务时,除了执行事务的连接之外的任何连接上,除了事务影响的表之外,所有SELECT都被阻塞.我可以在交易中执行获取,但不能在其他任何地方执行.这包括SSMS和其他cmdlet执行.这是预期的行为吗?好像我错过了什么......
PS脚本:
Start-Transaction
Add-Something -UseTransaction
Get-Something #hangs here until timeout
Add-Something -UseTransaction
Undo-Transaction
Run Code Online (Sandbox Code Playgroud) c# ×5
c++ ×3
winapi ×3
.net ×2
android ×2
.net-4.0 ×1
assemblies ×1
getlasterror ×1
mocking ×1
nunit ×1
powershell ×1
silverlight ×1
sql-server ×1
transactions ×1
unit-testing ×1
unmanaged ×1
vmware ×1