Если это подтверждение того, что всегда есть значение, такое как 3 цифры до десятичного знака, то ниже регулярное выражение можно использовать для получения требуемого результата-
select SUBSTRING(fieldName, PATINDEX('%[0-9][0-9][0-9].[0-9]%', fieldName), LEN(fieldName))
from table_name
Если ваше требование что-то изменило, пожалуйста, прокомментируйте. [112 ]
РЕДАКТИРОВАТЬ : я нашел более простой способ сделать это, по крайней мере, когда вы тестируете с пустым кешем. Используйте HttpRunTime.Cache в качестве возвращаемого значения для вашего ожидания в свойстве Cache HttpContext. Для более сложных сценариев использование оболочки и насмешек все еще может быть лучшим способом справиться с этим - например, если вам нужно протестировать исключения из кэша.
var httpContext = MockRepository.GenerateMock<HttpContextBase>();
httpContext.Expect( h => h.Cache ).Return( HttpRunTime.Cache ).Repeat.Any()
Оригинал :
Класс оболочки - это путь, но я думаю, что вы применяете это не в том месте. Я бы дал своему контроллеру свойство CacheWrapper, а затем создал конструктор, который позволил бы мне передать экземпляр CacheWrapper, в который можно установить это свойство. По умолчанию контроллер создает CacheWrapper, используя HttpContext.Current.Cache. В вашем тестовом коде создайте фиктивный CacheWrapper для передачи в конструктор контроллера. Таким образом, вам вообще не нужно создавать фиктивный объект Cache - что сложно, потому что это запечатанный класс.
В качестве альтернативы, вы можете просто создать экземпляр класса Cache и вернуть его, так как существует открытый конструктор для него. Преимущество использования макета заключается в том, что вы можете проверить, что кеш используется через ожидания, поэтому я, вероятно, согласился бы с оберткой.
public class CacheWrapper
{
private Cache Cache { get; set; }
public CacheWrapper()
{
this.Cache = HttpContext.Current.Cache;
}
public virtual Object Add( string key,
Object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration,
CacheItemPriority priority,
CacheItemRemovedCallback onRemoveCallback )
{
this.Cache.Add( key,
value,
dependencies,
absoluteExpiration,
slidingExpiration,
priority,
onRemoveCallback );
}
...wrap other methods...
}
public class BaseController : Controller
{
private CacheWrapper { get; set; }
public BaseController() : this(null) { }
public BaseController( CacheWrapper cache )
{
this.CacheWrapper = cache ?? new CacheWrapper();
}
}
[TestMethod]
public void CacheTest()
{
var wrapper = MockRepository.GenerateMock<CacheWrapper>();
wrapper.Expect( o => o.Add( ... ) ).Return( ... );
var controller = new BaseController( wrapper );
var result = controller.MyAction() as ViewResult;
Assert.AreEqual( ... );
wrapper.VerifyAllExpectations();
}
Вы можете попробовать использовать Typemock Isolator , он подделывает запечатанные классы из коробки, поэтому эти оболочки вам не понадобятся.
HttpContext.Current = new HttpContext(new HttpRequest(null, "http://tempuri.org", null), new HttpResponse(null));