|
Your code isn't really unit-testable as it stands. If you look at Microsoft Fakes you might be able to use that to mock your business layer as that can even mock static objects. If you want to do it "properly" then you'll need your BusinessLayer object to implement an interface (IBusinessLayer) and use inversion of control to pass an instance of your BusinessLayer or WorkQueueBEManager to your calling class. Rather than calling BusinessLayer.WorkQueueBEManager.GetItemByID(wqID) as you are now, you'll call the instance
BusinessEntity.WorkQueueBE be = this.businessLayer.WorkQueueBEManager.GetItemByID(wqID);
(where this.businessLayer is IBusinessLayer and populated via IoC) In your unit tests you then pass in a mocked version of BusinessLayer. If you google unit testing asp.net code you should find some specific examples of this stuff.
|
|
|
|
|
For now, to start the refactoring and unit testing, important part is to separate Data access layer from business layer.
As you can see,
[DataObjectMethod(DataObjectMethodType.Select, true)]
public static WorkQueueBE GetItemByID(int id)
{
return WorkQueueDB.GetItemByID(id);
}
the code directly calls the dataaccess layer. This makes it untestable. What i want to acheieve is to start testing these methods, and create mock for data access layer so that it can return hardcoded values while testing.
But how do i proceed with that ? Create interface, implement them in data access layer ? If anyone can cite an example on how to implement it.
modified 5-May-15 12:34pm.
|
|
|
|
|
Assuming DataAccess is a static class, you are in for a bit of work. I can think of several approaches, all of them boiling down to some form of dependency injection without going as far as trying to shoehorn an IoC container into your existing code.
One approach that could work:
1. Create an IDataAccess interface. Give it all the methods your DataAccess class currently has to provide your business entities with their data.
2. Remove the static specifier from your DataAccess class and make it an implementer of the new IDataAccess interface.
3. Create a new static class, for example DataAccessLayer and give it a single method, for example: Current(). Implement that method to return an instance of the DataAccess class as an IDataAccess interface reference. It is up to you to create a new instance for every call or to create a single instance and return that all the time.
4. Give every business entity a property of type IDataAccess. (They do all derive from some base class I hope?) Name it DataAccess. As it is closer in scope than anything outside of your business entities any method in those entities referencing DataAccess should now use the interface property instead of the DataAccess class.
5. Implement the DataAccess property getter of your business entities in such a way that it can returns the DataAccessLayer.Current IDataAccess interface reference, UNLESS a private IDataAccess _DataAccess member is non-null. In that case return the member reference.
6. Give all your business entities an extra "InitalizeDataAccess" method taking an IDataAccess parameter. Implement it to assign whatever is passed in to the private _DataAccess member.
7. Use the InitializeDataAccess method in your tests to provide your business entities with an IDataAccess implementer (DataAccess fake) that provides the business entities with data as needed by your tests.
---
http://softwareonastring.com
|
|
|
|
|
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<title>AutoComplete Box with jQuery
$(document).ready(function () {
SearchText();
});
function SearchText() {
alert('IN');
$(".autosuggest").autocomplete({
source: function (request, response) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "../WebService.asmx/Mydata",
data: "{'username':'" + JSON.stringify(document.getElementById('txtSearch').value) + "'}",
dataType: "json",
success: function (data) {
response(data.d);
},
error: function (result) {
alert(result);
}
});
}
});
}
|
|
|
|
|
|
|
- If it works with .Net 3.5 then go with that. Is there a reason you can't use 3.5?
- What do you mean it does not work with ASP.Net 2.0? What is the error?
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
i got error "object XMLHttpRequest" in alert message.
$(document).ready(function () {
SearchText();
});
function SearchText() {
$(".autosuggest").autocomplete
({
source: function (request, response) {
$.ajax
({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "../Default.aspx/Mydata",
data: "{'username':'" + request.term + "'}",
dataType: "json",
success: function (data) {
response(data.d);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(request.term);
alert(XMLHttpRequest);
alert(textStatus);
}
});
}
});
}
|
|
|
|
|
You want to alert XMLHttpRequest.responseText
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
This is what alert(XMLHttpRequest.response) gives to me..
<title>Not Found
body {font-family:"Verdana";font-weight:normal;font-size: 8pt;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
h1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
h2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Lucida Console";font-size: 8pt}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
Server Error in '/Autocomplete' Application.
HTTP Error 404 - Not Found.
Version Information: ASP.NET Development Server 10.0.0.0
|
|
|
|
|
404 Not found means just that, it can't find the url. Something is not configured right.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
Please help me to resolve the issue. i dont know where i am making mistake...
|
|
|
|
|
I'm not sure how I can. It says the page is not found. Your url is wrong. I can't help you fix it because I can't see your IIS.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
There is no need to install IIS on my local machine...i just wrote my webmethod on same .aspx page(code behind page)..and that method is not calling...sorry to disappoint you...
|
|
|
|
|
Himen23 wrote: There is no need to install IIS on my local machine...i just wrote my webmethod on same .aspx page(code behind page)..and that method is not calling...sorry to disappoint you... I'm not sure what you are trying to say.
Fix the url, then the problem would be solved.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
if i keep all code as it is and just change framework to 3.5 from 2.0 then this current code is working...so there is no issue with url ...i guess there is some issue in web.config setting for http handler..if you know this then please check...just to remind you that my webmethod is on my .aspx(code behind page itself)
Please check Default.aspx code behind code for reference
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Web.Services;
using System.Configuration;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public string Mydata(string username)
{
return "Returned String";
}
}
|
|
|
|
|
Himen23 wrote: f i keep all code as it is and just change framework to 3.5 from 2.0 then this current code is working...so there is no issue with url .. I understand what you're saying but the error you are getting is that the url is not found. How are you changing the .net framework?
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
Open solution Explorer>> Right click on Application>>Second last option "Property Pages" or "Shift+F4" >>Build tab change Target framework then...
|
|
|
|
|
I've never seen changing the target framework affect how a relative url works.
However, I have looked back at your posts and your original post has the url "../WebService.asmx/Mydata" but a couple of posts ago you said it was in Default.aspx.
You need to fix the url.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
i m sorry.. it was because i was trying different ways...but please cosider it as
"../Default.aspx/Mydata"
|
|
|
|
|
The error is what it is. It can't find the url. I've never seen changing the framework do that but perhaps you need to research the issue with relative urls and the framework.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
|
|
Very simple,
1 open the web source code,
2 copy from the embed script the source link of url,
where the video is linked to the page.
3 copy that link and past it in new page link bar.
enjoy
|
|
|
|
|
anyone please tell me how to make a contact form using asp.net c#. I have many time to try make a contact form but given error.
|
|
|
|