我正在为我们的某个产品编写单元测试,并使用Moq成功模拟与Entity Framework的连接.但是,我遇到了以下方法:
public static productValue findValues(string productName, string dbConnectionString)
{
try
{
SqlConnection conn = new SqlConnection(dbConnectionString);
conn.Open();
//Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
它使用传递的连接字符串访问该方法内的数据库.是否可以使用Moq设置模拟数据库并创建指向模拟数据库的连接字符串?我正在尝试做一些事情
var mockSqlConnnection = new Mock<SqlConnection>();
Run Code Online (Sandbox Code Playgroud)
虽然我不确定这是否是正确的方法,因为这会模拟连接本身而不是数据库.
我正在使用Visual Studio 2015并从我们的TFS源代码控制中删除了一个分支.查看其他指南,提到能够通过打开Source Control Explorer恢复分支,右键单击并选择"Undelete"或"Rollback".这些选项不可用
我没有将此分支映射到任何工作区.点击"撤消待处理的更改..."会显示一条消息,指出没有待处理的更改.如何在TFS上恢复分支?有没有办法可以启用Undelete或Rollback?
我们最近下载并托管了一个本地Visual Studio Team Services构建代理作为我们的源代码,并且已经注意到,与我们的托管代理相比,它在构建过程中还需要执行额外的步骤。这个额外的步骤是“职位清理”,如下所示:
在本地设置此代理时,没有设置此选项的选项,而在我们的构建步骤中,此额外工作未在此处列出:
我已经查看了在线指南,但是没有任何暗示这多余的步骤是从哪里来的。有谁知道在构建中包含/排除此选项的位置?
我正在尝试使用托管的VSTS构建代理对我们的AngularCLI项目运行单元测试,但是当它尝试运行'ng test'时它一直遇到麻烦.
为了解决这个问题,我尝试通过提供工具的路径,使代理直接使用ng工具.这没有用,因为它看起来像是在尝试运行'ng test'工具而不是在指定的当前工作目录中:
我还尝试将其添加为Windows中的环境变量(我们使用Windows Server 2012来托管VSTS代理)并在VSTS代理中设置工具,ng但它似乎没有找到ng工具:
如何让VSTS代理使用该ng工具运行测试?我们在托管代理的服务器上安装了@ angular/cli.
在工作中,我被要求增加我们在其中一个软件产品中的代码覆盖率.我以前从未进行过单元测试,并且已经在线阅读过一些教程; 这些都是有用的起点,但都遵循相同的模式 - 他们正在测试非常简单的方法/类,如计算器或银行帐户.
我在代码中找到了一个简单的方法来启动,但问题是它仍然比我读过的例子复杂得多,我不确定从哪里开始.这是方法:
public static void moveFiles {
string rootDir = ConfigurationManager.AppSettings["RootLoc"];
string dropboxLoc = ConfigurationManager.AppSettings["DropBoxLocation"];
DirectoryInfo dropbox = new DirectoryInfo(dropboxLoc);
folders = dropbox.GetDirectories("*", SearchOption.AllDirectories);
string path = "";
string prevPath = "";
foreach (DirectoryInfo di in folders)
{
FileInfo[] files = di.GetFiles();
foreach (FileInfo fi in files)
{
prevPath = fi.FullName;
string[] p = prevPath.Split(new string[] { dropbox.Name }, StringSplitOptions.None);
path = rootDir + p[1];
fi.MoveTo(path);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我为此创建了一个小测试方法:
[TestMethod]
public void GetDirectories_ValidLocation_SetsDropboxLocation()
{
string dropboxLoc …Run Code Online (Sandbox Code Playgroud) 我有一个班级负责制作用于导出的 PPT 幻灯片。为了对此进行单元测试,我创建了一个接口,以便可以使用 Moq 进行模拟;到目前为止一切都很好。然而,当我尝试测试我的方法是否已被调用时,我遇到了困难。这是一个 void 方法,所以此时我只想知道该方法已被命中。
这是我的界面:
interface IPowerpointExporter
{
void AddSlides(int amount);
void setTitle(string title);
}
Run Code Online (Sandbox Code Playgroud)
这是我的单元测试:
[TestMethod]
public void testPPTObject()
{
var mockPPT = new Mock<IPowerpointExporter>();
mockPPT.Setup(m => m.AddSlides(1)).Verifiable();
mockPPT.Object.AddSlides(1);
mockPPT.VerifyAll();
}
Run Code Online (Sandbox Code Playgroud)
然而,当我打电话时,AddSlides()我得到了一个GeneratorException。对此的解释是我的 IPowerpointExporter 无法访问。我有一种感觉,这是因为我正在尝试调用接口上的方法,尽管我不确定,因为mockPPT.Object.AddSlides();此时我已经得到了我的对象。
请注意,我还尝试了以下尝试使用实际对象而不是 Interface.Object。这也给出了同样的例外:
[TestMethod]
public void testPPTObject()
{
var mockPPT = new Mock<IPowerpointExporter>();
mockPPT.Setup(m => m.AddSlides(1)).Verifiable();
ExportPowerPoint temp = (ExportPowerPoint)mockPPT.Object;
temp.AddSlides(1);
mockPPT.VerifyAll();
}
Run Code Online (Sandbox Code Playgroud)
使用 Moq 如何检查我的方法是否已被调用?我上面所做的事情正确吗?
我在计算数据包从A到B所需的总时间时遇到一些困难,问题是:
"我们有200个字节的数据从A发送到B,它们之间的距离为200km.计算总传输时间,假设信号速度为200,000 km/s,数据速率为1Mbps,并且标题为必须在发送数据之前将40个字节添加到数据中."
我的理解是,在某些时候你需要考虑传播和光速(??),但我不确定在这种情况下是否需要它.有没有一个公式可以用来解决这些类型的问题?
我目前正在增加我们软件产品的代码覆盖率,但是遇到了问题。我的所有单元测试(使用“任何CPU”进行编译时)均由于抛出“ BadImageFormatException”而失败。
通过使用'x86'而不是'Any CPU'构建解决方案可以避免此异常,但是要求如此,因此我们需要能够使用Any CPU / x64位运行它们。
所有涉及Moq的单元测试都遵循几乎相同的格式:
[TestMethod]
public void GetProduct_ValidId_ProductReturned()
{
//Setting up the object
Product prod = new Product();
prod.ID = 7;
prod.Name = "Test";
//Create the mocks
var mockProductRepo = new Mock<IRepository<Product>>();
var testDb = new Mock<IUnitOfWork>();
//Setup what the repo needs to return, in this case it's a Product
mockProductRepo.Setup(m => m.getByID(7)).Returns(prod);
//Setup what the database needs to return, in this case it's our repo which we've already setup
testDb.SetupGet(m => m.ProductRepo).Returns(mockProductRepo.Object);
//Run the test …Run Code Online (Sandbox Code Playgroud) 我正在尝试添加签入策略以防止某些文件类型被提交到我们的源代码控制,但是当我从VS2015中添加签入策略时,"添加签入策略"中提供的列出的选项窗口未显示"禁止模式策略"作为选项:
我通过执行以下操作来实现此选项:
如何在VS2015中设置禁止模式策略?它移动了吗?
我可以确认此政策目前尚未在我们的源代码管理中设置.我们正在使用TFS.
我有一个DictionaryID作为键,列表列表作为值.我想知道列表中有多少列表.当我在调试时查询它时,这似乎给出了正确的值,但是当我去尝试访问该数据时,它只给出1而不是2的数量.我确定这是我缺少但我不能放的东西我的手指在上面.
整个方法是:
public static List<string> getStatisticsCSVHeaders(List<Items> itemList, Dictionary<int, List<List<Statistic>>> availableStats)
{
List<string> topRow = new List<string>();
for (int i = 0; i < availableStats.Values.Count; i++)
{
topRow.Add("Phase " + (i+1));
for (int k = 0; k < itemList.Count; k++)
topRow.Add(getMetricHeader(itemList[k], true));
}
return topRow;
}
Run Code Online (Sandbox Code Playgroud)
我想将列表中的列表数作为该行的计数器i < availableStats.Values.Count.
编辑:我应该提到我已经尝试availableStats.Values[0].Count但这不会编译.
在我的发布定义中,我已将环境设置为具有释放触发器,以便在使用特定标记完成构建时,将开始部署.但是,在设置此项后,不会启动任何版本或部署.我想我错过了一些小东西,但不能把我的手指放在它上面....
我的构建标记(在构建期间自动添加):
我的发布触发器:
在构建完成后,需要更改哪些设置才能启动发布和部署?
continuous-integration azure-devops azure-pipelines azure-pipelines-release-pipeline
我正在做一个简单的程序,可以读写.txt文件。我有要写入并保存.txt文件的程序,但是从.txt文件读取时遇到了一些麻烦。到目前为止,这是我得到的:
Using openTxt As New OpenFileDialog()
If openTxt.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim displayForm As New Form
Dim textReader As New System.IO.StreamReader(openTxt.FileName)
displayForm.ListBox1.Text = textReader.ReadToEnd
textReader.Close()
displayForm.Show()
Else
MessageBox.Show("Not a text file")
End If
End Using
Run Code Online (Sandbox Code Playgroud)
我想发生的是,当文本被读取时,它会填充在另一个窗体(displayForm)内的列表框中。我尝试使文本以相同的形式显示在列表框中,以查看是否可能已更改任何内容,但仍保持空白。我可以确认我只用.txt文件进行过测试,因为在此阶段我没有进行任何错误检查。非常感谢您的帮助!
我正在使用Moq对我们使用Entity Framework的一些代码进行单元测试.在我的单元测试中,我有以下代码,但是当我测试它时,我无法获得正确的返回值(一切编译好,但计数结果为0,返回null).这告诉我,我的Entity对象从未添加到我的模拟仓库中.
[TestMethod]
public void GetEntity_ValidName_EntityReturned()
{
Entity testEntity = new Entity();
testEntity.Name = "Test";
var mockService = new Mock<IUnitOfWork>();
mockService.Setup(mock => mock.EntityRepo.Add(testEntity));
IUnitOfWork testDB = mockService.Object;
testDB.EntityRepo.Add(testEntity);
Entity testEntity2 = EntityHelper.getEntity(testDB,testEntity.Name);
int count = testDB.EntityRepo.Count();
Assert.AreEqual(testEntity.Name,testEntity2.Name);
}
Run Code Online (Sandbox Code Playgroud)
如何添加实体?我还需要吗?我也尝试了以下无法编译:
mockService.Setup(mock => mock.EntityRepo.Add(testEntity)).Returns(testEntity);
Run Code Online (Sandbox Code Playgroud)
同上:
mockService.SetupGet(mock => mock.EntityRepo.Add(testEntity)).Returns(testEntity);
Run Code Online (Sandbox Code Playgroud)
编辑:这是测试的目标:
public static Entity getEntity(IUnitOfWork database, string entityName)
{
Entity _entity = database.EntityRepo.Find(x => x.Name.ToLower().Trim() == entityName).FirstOrDefault();
return _entity;
}
Run Code Online (Sandbox Code Playgroud) c# ×5
unit-testing ×5
moq ×4
azure-devops ×3
build ×2
tfs ×2
angular-cli ×1
azure-pipelines-release-pipeline ×1
branch ×1
commit ×1
database ×1
debugging ×1
dictionary ×1
exception ×1
file ×1
for-loop ×1
msbuild ×1
networking ×1
pre-commit ×1
propagation ×1
streamreader ×1
vb.net ×1