有没有办法让nunit测试结束并告诉测试运行器它应该被认为是跳过/忽略,而不是成功或失败?
我的动机是,我有一些测试在某些情况下不适用,但在测试(或可能是夹具)开始运行之前无法确定.
显然在这些情况下,我可以从测试中返回并允许它成功,但(a)这似乎是错误的,(b)我想知道测试已被跳过.
我知道[Ignore]属性,但这是编译的.我正在寻找一个运行时,程序化的等价物.就像是:
if (testNotApplicable)
throw new NUnit.Framework.IgnoreTest("Not applicable");
Run Code Online (Sandbox Code Playgroud)
或者以编程方式跳过测试错误?如果是这样,我该怎么办?
我有一个名称和地址表,其中包括一个邮政编码列.我想从邮政编码中删除空格并选择与特定模式匹配的任何空格.我在SQL Server 2005上的T-SQL中尝试这个(简化了一下):
SELECT Replace(Postcode, ' ', '') AS P
FROM Contacts
WHERE P LIKE 'NW101%'
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误;
Msg 207, Level 16, State 1, Line 3
Invalid column name 'P'.
Run Code Online (Sandbox Code Playgroud)
如果我删除WHERE子句,我会得到一个没有空格的邮政编码列表,这就是我想要搜索的内容.我该怎么做呢?我究竟做错了什么?
我有一个使用 VS2022 Preview 2 创建的 .NET MAUI 项目,它的构建没有错误或警告,并且在调试器中按预期工作。在将 Visual Studio 更新到版本 17.4.0 Preview 4.0 之前,我能够从 VS 内将项目发布为可旁加载的 MSIX。
更新后,当我在“创建应用程序包”向导中单击“创建”时,出现以下错误:
MSB4057 The target "_GenerateAppxPackage" does not exist in the project.
Run Code Online (Sandbox Code Playgroud)
该错误已在 MAUI 项目的 .csproj 文件中列出。
我尝试在新预览中创建一个单独的新默认 MAUI 项目 - 此发布正常并且(据我所知)不包含_GenerateAppxPackage其文件或项目结构中的任何位置。所以现在我假设这不是预览版中添加的新内容。
_GenerateAppxPackage我在网上找到了一些参考资料,但它们似乎是指 Azure 集成。我的项目是一个独立的数据转换应用程序,甚至不访问网络。
我不知道下一步该尝试什么。我不知道这个目标指的是什么,它应该在项目中“存在”的什么地方,或者它的作用是什么。谁能帮助我理解问题和/或指出解决方案?
更新:2022年10月28日:
我尝试删除项目结构并使用“文件”->“新建项目”从头开始创建它,然后仅添加回.cs 和 .xaml 文件。发布重新创建的项目给了我同样的错误。
我还尝试卸载VS预览版并重新下载并安装它。再次,发布项目给了我同样的错误。
我仍然不知道是什么原因造成的,甚至不知道从哪里开始寻找。
我有一个用C++编写的进程外COM服务器,它由一些C#客户端代码调用.其中一个服务器接口上的方法将大型BSTR返回给客户端,我怀疑这会导致内存泄漏.该代码有效,但我正在寻找有关编组BSTR的帮助.
简化一下,服务器方法的IDL是
HRESULT ProcessRequest([in] BSTR request, [out] BSTR* pResponse);
Run Code Online (Sandbox Code Playgroud)
并且实现如下:
HRESULT MyClass::ProcessRequest(BSTR request, BSTR* pResponse)
{
USES_CONVERSION;
char* pszRequest = OLE2A(request);
char* pszResponse = BuildResponse(pszRequest);
delete pszRequest;
*pResponse = A2BSTR(pszResponse);
delete pszResponse;
return S_OK;
}
Run Code Online (Sandbox Code Playgroud)
A2BSTR在内部使用SysAllocStringLen()分配BSTR.
在C#客户端中,我只需执行以下操作:
string request = "something";
string response = "";
myserver.ProcessRequest(request, out response);
DoSomething(response);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为请求字符串被发送到COM服务器并且正确的响应字符串被返回给C#客户端.但是每次往服务器的往返都会泄漏服务器进程中的内存.crt泄漏检测支持显示crt堆上没有重大泄漏,所以我怀疑泄漏是用IMalloc分配的.
我在这里做错了吗?我发现含糊的评论说'所有的参数必须用CoTaskMemAlloc分配,否则互操作编组将不会释放它'但没有细节.
安迪
我有一个表,用于存储递增的数字 ID(INT 类型)。它包含一行。使用查询增加 ID:
UPDATE TOP(1) MyTable
WITH(TABLOCKX)
SET NextID = NextID + 1
Run Code Online (Sandbox Code Playgroud)
我想将它移到一个存储过程中,该过程返回 NextID 列中递增之前的值,但我不确定如何使用 OUTPUT 参数执行此操作。任何帮助,将不胜感激。
此问题涉及在SQL Server 2005中设计非聚簇索引.
我有一张有数百万行的大桌子.只能读取或插入行.大多数操作都是读取.我一直在查看SELECT访问该表的各种查询,目的是提高读取访问速度.磁盘空间不是真正的问题.(每行都有一个唯一的ID,我将其用作聚集索引中的单个字段.)
我的问题是,如果非聚集索引索引的列数多于查询使用的列数,那么这会导致查询执行速度慢于与查询完全匹配的索引吗?
随着不同查询的数量增加,其WHERE子句中使用的列的排列数也会增加.我不确定在列表数量少(每个查询一个)的索引与更多列上的索引更少之间的权衡.
例如,假设我有两个SELECT查询.第一个在其WHERE子句中使用A,B,C和D列,第二个使用A,B,E和F.这里最好的做法是定义两个索引,一个在A/B/C/D上,其他在A/B/E/F; 或A/B/C/D/E/F的单一指数?
简介:如果我在构造函数初始化器中创建一个对象,如何保留对它的引用,以便稍后引用它?
细节:
我有一个类(LibBase,下面)需要一个StreamWriter作为其构造参数.我没有源代码LibBase- 它在第三方库中.
public class LibBase
{
public LibBase(System.IO.StreamWriter wtr) { ... }
}
Run Code Online (Sandbox Code Playgroud)
我MyClass从构造函数中派生出来,LibBase并MyClass希望将MyWriter(派生形式StreamWriter)的实例传递给基类.我这样做如下.
public class MyWriter : System.IO.StreamWriter
{
public MyWriter(int n) { ... }
// Contains unmanaged resources
}
public class MyClass : LibBase
{
public MyClass(int n)
: LibBase(new MyWriter(n))
{ }
}
Run Code Online (Sandbox Code Playgroud)
问题是MyWriter需要处理,所以MyClass应该配置它(并实现IDisposable这样做)但MyClass没有对创建的MyWriter实例的引用,所以我不能处理它.构造函数初始化程序的语法似乎不允许我保留引用.
我的解决方案是重新编码 …
sql-server ×3
c# ×2
sql ×2
.net ×1
atl ×1
c++ ×1
com ×1
constructor ×1
database ×1
indexing ×1
interop ×1
maui ×1
nunit ×1
t-sql ×1
unit-testing ×1