你能解释一下:
描述性源代码将不胜感激.
我读到它的任何地方都说下面的代码应该可行,但事实并非如此.
public async Task DoSomething(int x)
{
try
{
// Asynchronous implementation.
await Task.Run(() => {
throw new Exception();
x++;
});
}
catch (Exception ex)
{
// Handle exceptions ?
}
}
Run Code Online (Sandbox Code Playgroud)
也就是说,我没有抓到任何东西,并且在"投掷"线上得到一个"未处理的例外".我在这里很无能为力.
我有一对父/子关系的表 - 事件和事件详细信息.我有一个viewmodel,包含来自这两个表的信息.我有一个业务层方法,它传递一个需要更新两个表的viewmodel实例.
所以,在这个方法中,我使用EF6的新事务机制:
using (var transaction = this.db.Database.BeginTransaction())
{
try
{
// various database stuff
this.db.SaveChanges();
// more database stuff
this.db.SaveChanges();
// yet more database stuff
this.db.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
this.logger.logException(ex, "Exception caught in transaction, rolling back");
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题.我该如何测试?
我正在使用微软的单元测试框架,使用Moq,我在模拟DBContexts和DbSet <>时没有遇到任何麻烦,但我似乎无法弄清楚如何绕过事务的东西.
如果我不尝试模拟事务,我会得到一个InvalidOperationException:
"在应用程序配置文件中找不到名为xxx的连接字符串."
这很有道理 - 没有应用程序配置文件,也没有任何数据库.
但是如果我尝试模拟BeginTransaction(),我会得到初始化错误:NotSupportedException:
"非虚拟成员的设置无效:m => m.Database.BeginTransaction".
这让我追逐杂草,看着.NET方法的反编译,试图找出一些可能来自可用接口的类,或者某些东西,我可以以某种方式注入一个模拟对象.
我不是要对MS的事务代码进行单元测试 - 我只是想确保对每个表中的相应记录进行适当的更改.但就其而言,它看起来像是不可测试的,并且任何使用事务的方法都是不可测试的.这只是一种痛苦.
我用Google搜索过,没有发现任何有用的东西.有没有人遇到过这个问题?任何人都有关于如何进行的想法?
我已经坚持了几天,尽管有各种帮助,但这些解决方案都没有为我工作.我想要做的是使用EPPlus库创建一个excel文件,其中包含一些我从存储过程中提取的基本数据.这是我在ExportDocument.cs文件中的代码:
public static ExcelPackage CreateExcelDocument(int [] arr)
{
String path = @"D:\temp\testsheet3.xlsx";
//FileInfo newFile = null;
/*if (!File.Exists(path + "\\testsheet2.xlsx"))
newFile = new FileInfo(path + "\\testsheet2.xlsx");
else
return newFile;*/
using (ExcelPackage package = new ExcelPackage())
{
ExcelWorksheet ws = package.Workbook.Worksheets.Add("testsheet");
ws.Cells["B1"].Value = "Number of Used Agencies";
ws.Cells["C1"].Value = "Active Agencies";
ws.Cells["D1"].Value = "Inactive Agencies";
ws.Cells["E1"].Value = "Total Hours Volunteered";
ws.Cells["B1:E1"].Style.Font.Bold = true;
int x = 2;
char pos = 'B';
foreach (object o in arr)
{
String str = pos …Run Code Online (Sandbox Code Playgroud) public DataTable InsertItemDetails(FeedRetailPL objFeedRetPL)
{
DataTable GetListID = new DataTable();
try
{
SqlParameter[] arParams = new SqlParameter[4];
arParams[0] = new SqlParameter("@Date", typeof(DateTime));
arParams[0].Value = objFeedRetPL.requestdate;
}
catch (Exception ex)
{
string dir = @"C:\Error.txt"; // folder location
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
File.AppendAllText(Server.MapPath("~/Error.txt"), "Message :" + ex.Message + "<br/>" + Environment.NewLine + "StackTrace :" + ex.StackTrace +
"" + Environment.NewLine + "Date :" + DateTime.Now.ToString());
string New = Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine;
File.AppendAllText(Server.MapPath("~/Error.txt"), New);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想在"C:\"中保存一个异常..我正在尝试在DAL ...如何在C驱动器中保存异常Error.txt
我正在编写一个代码,用于打印出数组中重复的整数及其出现次数.我不允许使用LINQ,只是一个简单的代码.我想我是如此接近但对如何获得正确的输出感到困惑:
class Program
{
static void Main(string[] args)
{
int[] array = { 10, 5, 10, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 11, 12, 12 };
int count = 1;
for (int i = 0; i < array.Length; i++)
{
for (int j = i; j < array.Length - 1 ; j++)
{
if(array[j] == array[j+1])
count = count + 1;
}
Console.WriteLine("\t\n " + array[i] + "occurse" + count);
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我将如何在周三和下周周三的C#日期上周获得:
public Form1()
{
InitializeComponent();
CurrentDate.Text = "Today's Date: " + DateTime.Now.ToString("dd/MM/yyyy");
CurrentRent.Text = "Current Rent Date: "; // last wednesday
NextRent.Text = "Next Rent Date: "; // next wednesday
}
Run Code Online (Sandbox Code Playgroud) 我目前正在学习C#中的运算符和表达式,我明白如果我想将变量的值增加5,我可以用两种不同的方式来实现:a = a + 5和a += 5.显然,第二种方式更容易,写得更快,阅读更愉快.但是,从计算机的角度来看,a += 5速度要快a = a + 5吗?编译和执行的时间是否比表达式的较长版本少?
我正在使用XAML/C#构建Windows 8 metro应用程序.我正在使用流保存.xml文件我的数据结构,如下所示:
XmlSerializer serializer = new XmlSerializer(typeof(MyObjectType));
using (var stream = await App.LocalStorage.OpenStreamForWriteAsync(MyObject.Title + ".xml", Windows.Storage.CreationCollisionOption.GenerateUniqueName))
serializer.Serialize(stream, MyObject);
Run Code Online (Sandbox Code Playgroud)
哪里:
App.LocalStorage
Run Code Online (Sandbox Code Playgroud)
显然是一个StorageFolder对象设置为
Windows.Storage.ApplicationData.Current.LocalFolder
Run Code Online (Sandbox Code Playgroud)
设置GenerateUniqueName选项是为了避免冲突,因为我的对象可以具有相同的标题.现在,我需要获取我的流生成的文件名,我该如何获取它?
谢谢
在我们当前的自动化(使用Selenium/WebDriver/Java)中,我们使用@FindBy 非常广泛.例如:
@FindBy(css="a[name='bcrumb']") protected List<WebElement> breadCrumbLinks;
@FindBy(id="skuError") protected WebElement skuError;
@FindBy(className="reducedPrice") protected List<WebElement> reducedPrice;
@FindBy(partialLinkText="Injinji RUN 2.0") protected WebElement playButton;
@FindBy(linkText="annual member refund") protected WebElement annualMemberRefund;
@FindBy(xpath="//li[@itemprop='price']") protected WebElement productPrice;
Run Code Online (Sandbox Code Playgroud)
根据定义,@FindBy可以使用以下命令定位选择器:using,id,name,className,css,tagName,linkText,partialLinkText和xpath.
最近,我们的前端开发人员建议我们实现一个以'test ='开头的新属性类.我认为这是一个好主意,因为我们可以通过查找文本的模糊来找到WebElements,而不是@FindBy本身使用的值.我的问题是,这将是更好地扩大现有功能的@FindByOR,创建搜索,我们在我们的测试中使用WebElements的一种新的方式?
c# ×9
.net ×2
arrays ×1
asp.net ×1
automation ×1
c#-4.0 ×1
c#-5.0 ×1
duplicates ×1
epplus ×1
exception ×1
expression ×1
filestream ×1
java ×1
moq ×1
operators ×1
predicate ×1
selenium ×1
try-catch ×1
unit-testing ×1